1

次の形式の非常に大きなマトリックスを生成したいと思います。

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

n の値が 100 万以上の場合。matlab/octave でこれを行うにはどうすればよいですか?

私は関数型プログラミングに慣れており、そこから大きなリストを生成し[1..n]、変換関数をそのリストにマップします。matlab/octave には、大きな行列を生成するための同様のイディオムがあると思いますが、何も見つかりません。

4

4 に答える 4

3

rとを目的の行列cの行数と列数にすると、

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

それを試してみてください。最初にすべてゼロの行列を作成します。これは、各反復で行列を動的に更新するよりもはるかに効率的であるためです。特に非常に大きな行列の場合。Matlab はベクトルを列優先順に格納するため、内側の for ループで行を反復処理する必要があるため、列を反復処理する場合のように、これらの操作を実行するために Matlab がキャッシュとメイン メモリの間を行き来する必要がありません。内側の for ループで。(それでも頻度はかなり減ります)。

于 2013-02-23T20:15:47.150 に答える
1

さらに別のオプション:

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