2013-02-23 85 views
0

我想生成表单的一个非常大的矩阵:如何在matlab/octave中生成大型矩阵?

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

对于N值高达一百万以上。你如何在matlab/octave中做到这一点?

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

回答

3

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

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

很简单。谢谢 – 2013-02-23 20:33:17

2

这应该工作:

n=100000;  
A=[[1:n]' [2:n+1]' [3:n+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不必在缓存和主内存之间继续进行这些操作,就像它在迭代通过内循环的列。 (它仍然会少得多)。

1

另一种选择:

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