【问题标题】:How to generate large matrices in matlab/octave?如何在 matlab/octave 中生成大矩阵?
【发布时间】:2013-02-23 19:04:06
【问题描述】:

我想生成一个非常大的矩阵形式:

[[1,2,3]
,[2,3,4]
,[3,4,5]
...
,[n,n+1,n+2]]

对于 n 的值高达一百万或更多。你如何在 matlab/octave 中做到这一点?

我习惯于函数式编程,我会从[1..n] 生成一个大列表并将转换函数映射到该列表。我假设 matlab/octave 有一个类似的习惯用法来生成大型矩阵,但我找不到任何东西。

【问题讨论】:

    标签: matlab octave


    【解决方案1】:

    rc 成为你想要的矩阵的行数和列数,然后

    M = bsxfun(@plus, 0:c-1, (1:r)');
    

    【讨论】:

      【解决方案2】:

      这应该可行:

      n=100000;    
      A=[[1:n]' [2:n+1]' [3:n+2]'];
      

      【讨论】:

        【解决方案3】:
        A=zeros(n, 3);
        for column=1:3
             for row=1:n
                   A(row, column) = n + column - 1;
             end
        end
        

        试试看。您想首先创建一个全为零的矩阵,因为它比在每次迭代时动态更新矩阵要高效得多;特别是对于非常大的矩阵。 您想遍历内部 for 循环上的行,因为 Matlab 以列优先顺序存储向量,因此 Matlab 不必像遍历列那样在缓存和主内存之间继续执行这些操作在内部 for 循环。 (它仍然会少很多)。

        【讨论】:

          【解决方案4】:

          还有一个选择:

           bsxfun(@plus,cumsum(ones(n,1)),[0 1 2]);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-11
            • 1970-01-01
            • 2013-09-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多