【问题标题】:What's the maximum length of matrix I can store in Matlab我可以在 Matlab 中存储的矩阵的最大长度是多少
【发布时间】:2019-11-08 10:02:46
【问题描述】:

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

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

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

【问题讨论】:

  • 您的循环与matrix = randn(4,1e6) 的作用相同。因为您没有为矩阵分配任何内存,所以循环需要很多时间,请参阅preallocation。至于矩阵的最大大小,这取决于你有多少可用的 RAM。

标签: matlab matrix


【解决方案1】:

这取决于您的可用 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),这甚至比循环更快。


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多