0
我已經在Octave中編寫了一個小代碼,其中一部分是檢查兩個矩陣的第一行中的值是否相等,如果是,則將第二個矩陣的第二行的值添加到第二行的值中的第一個矩陣。如何通過替換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的最大值)很小)。但循環需要花費數小時才能以更大的值執行。
如何縮短執行時間並獲得相同的結果?
@馬特你說得對事實並非如此。但是,問題中的上述代碼肯定是用Octave而不是MATLAB編寫的。 'columns'函數僅在Octave中可用,該函數返回矩陣中的列總數。我已經刪除了MATLAB標籤。 – rayryeng
@rcpinto這給了我相同的結果,就好像我的代碼說'如果PositionLoadArray(1,any(y))== X(1,x)'。當你閱讀這個問題時,它做了什麼。我認爲編輯我的問題的人添加了這個部分。你知道現在如何解決這個問題嗎? –
@rayryeng好的。這顯然是Octave,OP就這樣編輯了這個問題。 – Matt