我想生成表單的一個非常大的矩陣:如何在matlab/octave中生成大型矩陣?
[[1,2,3]
,[2,3,4]
,[3,4,5]
...
,[n,n+1,n+2]]
對於N值高達一百萬以上。你如何在matlab/octave中做到這一點?
我已經習慣了函數式編程,我將從[1..n]
生成一個大列表並將轉換函數映射到該列表。我假設matlab/octave具有類似的用於生成大型矩陣的習慣用法,但是我找不到任何東西。
我想生成表單的一個非常大的矩陣:如何在matlab/octave中生成大型矩陣?
[[1,2,3]
,[2,3,4]
,[3,4,5]
...
,[n,n+1,n+2]]
對於N值高達一百萬以上。你如何在matlab/octave中做到這一點?
我已經習慣了函數式編程,我將從[1..n]
生成一個大列表並將轉換函數映射到該列表。我假設matlab/octave具有類似的用於生成大型矩陣的習慣用法,但是我找不到任何東西。
讓r
和c
是你想要的矩陣的行數和列數,然後
M = bsxfun(@plus, 0:c-1, (1:r)');
這應該工作:
n=100000;
A=[[1:n]' [2:n+1]' [3:n+2]'];
A=zeros(n, 3);
for column=1:3
for row=1:n
A(row, column) = n + column - 1;
end
end
嘗試。你首先要創建一個全零的矩陣,因爲它比在每次迭代中動態更新矩陣的效率高很多;特別是對於非常大的矩陣。 你想循環遍歷內部for循環的行,因爲Matlab以列 - 主要的順序存儲向量,所以Matlab不必在緩存和主內存之間繼續進行這些操作,就像它在迭代通過內循環的列。 (它仍然會少得多)。
另一種選擇:
bsxfun(@plus,cumsum(ones(n,1)),[0 1 2]);
很簡單。謝謝 – 2013-02-23 20:33:17