1

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

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

对于 n 高达一百万或更多的值。你如何在 matlab/octave 中做到这一点?

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

4

4 回答 4

3

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

M = bsxfun(@plus, 0:c-1, (1:r)');
于 2013-02-23T20:08:57.363 回答
2

这应该有效:

n=100000;    
A=[[1:n]' [2:n+1]' [3:n+2]'];
于 2013-02-23T20:12:11.970 回答
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 循环。(它仍然会少很多)。

于 2013-02-23T20:15:47.150 回答
1

还有一个选择:

 bsxfun(@plus,cumsum(ones(n,1)),[0 1 2]);
于 2013-02-23T23:30:40.017 回答