【发布时间】:2018-11-20 17:34:49
【问题描述】:
运行下面的代码可以重现我遇到的问题。
gcp;
C={};
for i=1:1000
C = [C,{tall(ones(1000,1,1000,2))}];
pause(0.05)
end
我的期望是,因为 tall 数组只是为了评估表达式而被带入内存,然后一次只有几行,所以上述不会立即导致内存问题。但是,它似乎以与调用完全相同的方式填满了我的 ram
gcp;
C={};
for i=1:1000
C = [C,{ones(1000,1,1000,2)}];
pause(0.05)
end
也就是说,使用 tall 数组似乎对内存使用没有任何影响。
如果我希望将 MatLab 生成的大量数据存储在内存之外,我应该怎么做?使用 tall 数组似乎不起作用。
注意:我使用的是 MatLab 2017a,它不支持 tall 数组的垂直串联。因此,我正在使用该结构
{rows1,rows2,...,rowsn}
表示同一数组的行块。这可能不是最优的。
【问题讨论】:
-
来自docs:Tall 数组提供了一种处理由数据存储支持的数据的方法。如果阵列的其余部分存储在其他地方的磁盘上,则只有部分阵列被加载到内存中。否则内存是您定义这些数组的唯一位置,MATLAB 还能如何保存数组包含的内容?
-
哦,好吧,我以为它把它放在磁盘上某个不碍事的地方,在它自己的目录之一中。所以我需要将我的每个 tall 数组存储到某个地方的磁盘上,然后内存将是空闲的 :)
-
是的,这应该可以按您的预期工作。当然,您可以以编程方式将大型数组保存到磁盘,随时清除内存,然后将它们作为 tall 数组一起加载。
-
我该怎么做呢?我知道我可以使用 save 或 write 将数组存储到磁盘,但是如何将它们全部加载为单个数组?