matlab - matlab中 "out of memory"错误的解决方法

标签 matlab out-of-memory

我有一个非常大的文本文件(大约 11GB)需要在 matlab 中加载。但是当我使用“textread”函数时,“内存不足”错误发生了。并且没有办法减小文件大小.当我输入内存时,给我看这个。

memory
Maximum possible array:     24000 MB (2.517e+10 bytes) *
Memory available for all arrays:     24000 MB (2.517e+10 bytes) *
Memory used by MATLAB:      1113 MB (1.167e+09 bytes)
Physical Memory (RAM):     16065 MB (1.684e+10 bytes)

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

有没有人能解决这个问题?

最佳答案

@Anthony 建议了一种逐行读取文件的方法,这非常好,但是更新的 (>=R2014b) 版本的 MATLAB 有 datastore功能,旨在以 block 的形式处理大型数据文件。

根据文本文件的格式,有多种类型的datastore 可用。在最简单的情况下(例如 CSV 文件),自动检测效果很好,您可以简单地说

ds = datastore('myCsvFile.csv');
while hasdata(ds)
    chunkOfData = read(ds);
    ... compute with chunkOfData ...
end

在最新 (>=R2016b) 版本的 MATLAB 中,您可以更进一步,将您的 datastore 包装到 tall 中大批。 tall 数组让您可以对太大而无法一次性放入内存的数据进行操作。 (在幕后,tall 数组以 block 的形式执行计算,并且仅当您通过调用 gather 请求它们时才为您提供结果)。例如:

tt = tall(datastore('myCsvFile.csv'));
data = tt.SomeVariable;
result = gather(mean(data)); % Trigger tall array evaluation

关于matlab - matlab中 "out of memory"错误的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55846862/

相关文章:

matlab - 在分析期间应如何存储大型 MATLAB 数据文件?

matlab - 如何在 MATLAB 中随机排列 3D 矩阵中的列

C++/Windows : How to report an out-of-memory exception (bad_alloc)?

c# - 在 session 中缓存搜索结果与保持大对象堆清洁

Matlab矩阵乘法和转置精度

matlab - 如何在 MATLAB 中将 '1*1 char' 转换为逻辑向量?

matlab - 在Matlab中,使用VideoWriter将图像写入AVI而不显示

out-of-memory - 同时运行多个 Hive 查询时 Thrift 驱动程序 OutOfMemory

c - 读取文件时内存分配问题

csv - 如何从 compojure API 流式传输大型 CSV 响应,以便整个响应不会立即保存在内存中?