我可以在Matlab中存储的矩阵的最大长度是多少

时间:2019-11-08 10:02:46

标签: matlab matrix

我正在尝试存储大小为// Wrap arrays in another array to get a parsable object const coords = '[42.46329472141537,21.46498522471254],[42.463191829327116,21.4654574564449],[42.463524249310545,21.465586246917347],[42.463642970305486,21.465092550106277]'; console.log(JSON.parse(`[${coords}]`));的矩阵,但是Matlab在运行时无法做到这一点,就像它无法存储具有该大小的矩阵,或者我应该使用另一种存储方式。代码如下:

4 x 10^6

问题仍然存在很长时间并且无法完成,但是,当我删除行matrix = []; for j = 1 : 10^6 x = randn(4,1); matrix = [matrix x]; end 时,它可以非常快速地完成循环。因此,我需要在文件中保存matrix = [matrix x];,以便可以在需要的地方使用它。

1 个答案:

答案 0 :(得分:4)

这取决于您的可用RAM量。如果像此处一样存储双精度值,则每个数字需要64位。因此,存储4M值需要4 * 10 ^ 6 * 64 = 256M位,这就是32MB RAM。

A = rand(4,1e6);
whos A
  Name      Size                    Bytes  Class     Attributes

  A         4x1000000            32000000  double  

因此,只有在可用内存少于32MB的情况下,您才能存储此文件。

代码之所以需要那么长的时间,是因为您在适当的位置扩展了矩阵。 matrix = [matrix x];行上的橙色摆动不是因为节日快到了,而是因为这样做是非常不好的做法。正如警告告诉您的那样:预分配矩阵。您知道它将有多大,因此只需将其初始化为matrix = zeros(4,1e6);即可,而不用增大它。

当然,在这种情况下,您可以简单地执行matrix = rand(4,1e6),这比循环要快。


有关预分配的更多信息,请参见the official MATLAB documentationthis question(我已回答)或this one