2013-02-23 50 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]);