2016-04-03 31 views
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的最大值)很小)。但循環需要花費數小時才能以更大的值執行。

如何縮短執行時間並獲得相同的結果?

回答

0

嘗試

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

@馬特你說得對事實並非如此。但是,問題中的上述代碼肯定是用Octave而不是MATLAB編寫的。 'columns'函數僅在Octave中可用,該函數返回矩陣中的列總數。我已經刪除了MATLAB標籤。 – rayryeng

+0

@rcpinto這給了我相同的結果,就好像我的代碼說'如果PositionLoadArray(1,any(y))== X(1,x)'。當你閱讀這個問題時,它做了什麼。我認爲編輯我的問題的人添加了這個部分。你知道現在如何解決這個問題嗎? –

+0

@rayryeng好的。這顯然是Octave,OP就這樣編輯了這個問題。 – Matt