【问题标题】:large data file in matlab doesn't load/importmatlab中的大数据文件不加载/导入
【发布时间】:2012-09-30 23:39:36
【问题描述】:

我一直在尝试将数据文件 (csv) 加载到在 win7(64 位)上运行的 matlab 64 位中,但出现与内存相关的错误。文件大小约为 3 GB,第一列包含日期 (dd/mm/yyyy hh:mm:ss),另外两列包含买卖价格。内存命令返回以下内容:

  Maximum possible array:              19629 MB (2.058e+010 bytes) *
  Memory available for all arrays:     19629 MB (2.058e+010 bytes) *
  Memory used by MATLAB:                 522 MB (5.475e+008 bytes)
  Physical Memory (RAM):               16367 MB (1.716e+010 bytes)

*  Limited by System Memory (physical + swap file) available.

这里有人可以解释一下,如果最大可能的数组大小是 19.6 GB,那么为什么 matlab 在导入大约 3GB 的数据数组时会抛出内存错误。如果这对有经验的人来说是一个简单的问题,我深表歉意,因为我在进程/应用程序内存管理方面几乎没有经验。

如果有人也建议能够将此数据集加载到 matlab 工作区的解决方案,我将不胜感激。

谢谢。

【问题讨论】:

  • 您的 csv 中的数据被转换为本机数据类型。我不知道您是如何读取日期的,但数字是 8 字节双精度数。因此,根据文件中的数字,内存消耗可能大于文件大小本身。您需要显示更多信息,例如发布输入文件的一部分,以及用于读取它的代码。以及错误消息。
  • 谢谢。我只是设法使用以下函数将数据加载到 matlab 中: textscan(fileid,'%s %f %f','Delimiter',',');日期字段为字符串。你是对的,当我观察资源利用率时,整个 16GB 内存都用于此目的。我需要了解可用于此的其他格式。非常感谢您的回复。

标签: matlab memory bigdata


【解决方案1】:

我不是内存管理方面的专家,但根据经验,我可以告诉您,如果您要导入/导出 3GB 文本文件,您会遇到各种问题。

我会在读取数据之前使用外部工具拆分数据,或者考虑以更适合大型数据集的另一种格式存储数据。就个人而言,我过去曾使用过hdf5——这是为大量数据设计的,也得到matlab 的支持。

与此同时,这些链接可能会有所帮助:

Working with a big CSV file in MATLAB

Handling Large Data Sets Efficiently in MATLAB

【讨论】:

  • 感谢您的回复。我设法使用 textscan 功能将数据上传到 matlab 中。但是所有 16GB 内存都被使用了。感谢您对 hdf5 的建议,我从供应商那里得到了日期,他们会以 csv 格式提供它 - 是否可以在将数据加载到 matlab 之前直接将文件格式转换为 hdf5 ?谢谢。
  • 这是可能的,但您可能需要自己编写工具来执行此操作。当我这样做时,我使用 python 读取 CSV 文件并将它们转换为 hdf5。老实说,最简单的答案是要求您的供应商以合理的格式提供数据。鉴于其所有带有时间戳的数据,至少对我而言,将数据拆分成更小的块是有意义的。将 csv 文件拆分为更小的部分也比转换为 hdf5 容易得多。例如,在 unix 环境中,您可以使用 split 命令直接拆分它们。祝你好运!
  • 谢谢 - 我会检查转换。我同意最好询问供应商,看看他们是否可以以更易于管理的格式提供数据。非常感谢您的帮助。
【解决方案2】:

我已经发布了before,展示了如何使用memmapfile() 在 matlab 中读取巨大的文本文件。这种技术也可能对您有所帮助。

【讨论】:

  • 谢谢。我将检查代码以了解如何将其用于我的模型。非常感谢。
猜你喜欢
  • 2015-03-17
  • 2014-02-23
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 2020-11-22
  • 2015-10-22
相关资源
最近更新 更多