我可以通过运行以下代码来复制我遇到的问题。
gcp;
C={};
for i=1:1000
C = [C,{tall(ones(1000,1,1000,2))}];
pause(0.05)
end
我的期望是,因为高数组只是为了评估表达式而被带入内存,然后一次只有几行,所以上面不会导致直接的内存问题。然而,它似乎以与调用
完全相同的方式填满了我的ramgcp;
C={};
for i=1:1000
C = [C,{ones(1000,1,1000,2)}];
pause(0.05)
end
也就是说,使用高数组似乎根本不会对内存使用产生任何影响。
如果我希望将MatLab生成的大量数据存储在内存之外,我应该怎么做?使用高大的阵列似乎无法发挥作用。
注意:我使用的是MatLab 2017a,它不支持高阵列的垂直连接。因此我使用结构
{rows1,rows2,...,rowsn}
表示同一数组的行块。这可能不是最佳的。
答案 0 :(得分:0)
如评论中所述 - 本地tall
数组构造函数(您为其提供本地数据而不是datastore
)通常仅用于内存原型设计,然后才能指向{{1数组在tall
的真实大数据中。
您可以使用tall/write
将高阵列写入磁盘,然后从datastore
中使用的位置读取datastore
。这将处理数据而不会将其全部重新加载到内存中。