如何在matlab / octave中生成大型矩阵?

时间:2013-02-23 19:04:07

标签: matlab octave

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

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

对于n达到一百万或更多的值。你是怎么用matlab / octave做的?

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

4 个答案:

答案 0 :(得分:3)

rc为所需矩阵的行数和列数,然后

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

答案 1 :(得分:2)

这应该有效:

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

答案 2 :(得分:2)

A=zeros(n, 3);
for column=1:3
     for row=1:n
           A(row, column) = n + column - 1;
     end
end

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

答案 3 :(得分:1)

又一个选择:

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