3

MATLAB で for ループを実行しています。各反復は、前の反復で作成されたベクトルとは異なる長さのベクトルを生成します。個々のベクトルを回復する理由はありますか? 最後に、これらのベクトルをそれぞれ連結したいと思います。私のコードは次のようなものです

for i=1:n 
    v = zeros(1,i)
end

そのため、後i=nv1×nのベクトルになりますが、任意のベクトルも回復したいと思いますi。私のコードでは、各ベクトルvはゼロ行ベクトルではなく、さまざまなサイズのベクトルです。ありがとう。

4

2 に答える 2

6

ロディの投稿(+1)が届いたとき、私はすでにこれを入力していたので、私も投稿したほうがいいと思いました。Rodyのものよりも非常にわずかに効率が悪い(私はいくつかの時限実行を行いましたが、違いはわずかでした)が、複雑なインデックス付けを回避する代替ソリューションは次のとおりです。

A = cell(1, n);
for i = 1:n
    A{1, i} = zeros(1, i);
end
Soln = cat(2, A{:});

さまざまな長さの行ベクトルをループを介してセル配列に格納し、最後のステップでそれらを連結します。

于 2012-09-20T05:15:01.617 に答える
3

最も簡単な方法は次のとおりです。

w = [];
for i=1:n 
    v = zeros(1,i);

    %# your stuff here      

    w = [w v];
end

これにより、w生成されたすべてのベクトルを連結したベクトルが生成されvます。

ただし、w反復ごとに成長するため、これは遅いことに注意してください。少し複雑ですが、より効率的な解決策は次のとおりです。

w = zeros(1, sum(1:n) );
j = 1;
for i=1:n 
    v = zeros(1,i);  

    %# your stuff here      

    w(1, j:j+i-1) = v;
    j = j+i;
end
于 2012-09-20T05:00:02.607 に答える