Matlab高大的数组和内存

时间:2018-06-11 12:50:49

标签: arrays matlab memory

我可以通过运行以下代码来复制我遇到的问题。

gcp;
C={};
for i=1:1000
    C = [C,{tall(ones(1000,1,1000,2))}];
    pause(0.05)
end

我的期望是,因为高数组只是为了评估表达式而被带入内存,然后一次只有几行,所以上面不会导致直接的内存问题。然而,它似乎以与调用

完全相同的方式填满了我的ram
gcp;
C={};
for i=1:1000
    C = [C,{ones(1000,1,1000,2)}];
    pause(0.05)
end

也就是说,使用高数组似乎根本不会对内存使用产生任何影响。

如果我希望将MatLab生成的大量数据存储在内存之外,我应该怎么做?使用高大的阵列似乎无法发挥作用。

注意:我使用的是MatLab 2017a,它不支持高阵列的垂直连接。因此我使用结构

{rows1,rows2,...,rowsn}

表示同一数组的行块。这可能不是最佳的。

1 个答案:

答案 0 :(得分:0)

如评论中所述 - 本地tall数组构造函数(您为其提供本地数据而不是datastore)通常仅用于内存原型设计,然后才能指向{{1数组在tall的真实大数据中。

您可以使用tall/write将高阵列写入磁盘,然后从datastore中使用的位置读取datastore。这将处理数据而不会将其全部重新加载到内存中。