我想生成表单的一个非常大的矩阵:如何在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