2016-04-03 56 views
0

私はOctaveに小さなコードを書いており、その一部は2つの行列の最初の行の値が等しいかどうかを調べていれば、2番目の行列の2番目の行の値を2番目の行の値に加えます最初の行列のwhileループを置き換えて実行時間を短縮する方法を教えてください。

これは、データの小さなセットを使用して、私が書いたコードの一部です:

PositionLoadArray = 
1 5 3 7 4 6 9 2 1 2 
1 2 3 4 5 6 7 8 9 10 

X = 
0 1 2 3 4 5 6 7 8 9 
0 0 0 0 0 0 0 0 0 0 

x=1; #row number in matrix X 
y=1; #row number in matrix PositionLoadArray 

while y<=columns(PositionLoadArray) 

    if PositionLoadArray(1,y)==X(1,x) 
     X(2,x)=X(2,x)+PositionLoadArray(,y); 
     y=y+1; 
     x=1;  
    else  
     x=x+1;  
    endif 

endwhile 

これは、結果得られます。

X = 
0 1 2 3 4 5 6 7 8 9 
0 10 18 3 5 2 6 4 0 7 

ループの実行を、小型のために完璧に動作します上記のように設定します(つまり、XとPositionLoadArrayの列の合計数(それぞれxとyの最大値)が小さい場合)。しかし、より大きな値でループを実行するには時間がかかります。

実行時間を短縮して同じ結果を得るにはどうすればよいですか?

答えて

0

は、あなたはそれがない正しい

X(2, X(1,:) == Y(1,:)) += Y(2, X(1,:) == Y(1,:)) 
+0

@Mattを試してみてください。しかし、上記のコードは、MATLABではなくOctaveで書かれています。 'columns'関数はOctaveでのみ利用でき、これは行列の総数を返します。私はMATLABタグを削除しました。 – rayryeng

+0

@rcpintoこれは、私のコードが 'PositionLoadArray(1、any(y))== X(1、x)'ならば同じ結果を返します。あなたがその質問を読むときにしたこと私は自分の質問を編集した人がその部分を加えたと思う。今問題を解決する方法を知っていますか? –

+0

@rayryengニースキャッチ。明らかにOctaveですが、OPはそれに応じて質問を編集しました。 – Matt

関連する問題