首页 > 解决方案 > 我可以在 Matlab 中存储的矩阵的最大长度是多少

问题描述

我正在尝试存储一个 size 的矩阵4 x 10^6,但是 Matlab 在运行它时无法做到这一点,就像它无法存储具有该大小的矩阵一样,或者我应该使用另一种方式来存储。代码如下:

matrix = [];
    for j = 1 : 10^6 
        x = randn(4,1); 
        matrix = [matrix x]; 
    end 

它仍然运行很长时间并且无法完成的问题,但是当我删除该行时matrix = [matrix x];,它会很快完成循环。所以我需要的是拥有matrixin 文件,以便我可以在需要的任何地方使用它。

标签: matlabmatrix

解决方案


它取决于您的可用 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  

因此,只有当您的可用 RAM 少于 32MB 时,您才能存储它。

您的代码需要这么长时间的原因是因为您将矩阵扩展到位。线上的橙色摆动matrix = [matrix x];并不是因为节日快到了,而是因为这样做是非常糟糕的做法。正如警告告诉你的那样:预先分配你的矩阵。你知道它会有多大,所以只需初始化它matrix = zeros(4,1e6);而不是增长它。

当然在这种情况下你可以简单地做matrix = rand(4,1e6),这甚至比循环更快。


有关预分配的更多信息,请参阅官方 MATLAB 文档this question(我已回答)或this one


推荐阅读