2016-04-03 5 views
0

Ich habe einen kleinen Code in Octave geschrieben und ein Teil davon überprüft, ob Werte in den ersten Zeilen von zwei Matrizen gleich sind, und wenn ja, addiere den Wert der zweiten Zeile der zweiten Matrix zum Wert der zweiten Zeile der ersten Matrix. Wie verkürze ich die Ausführungszeit, indem ich die While-Schleife ersetze?

Dies ist der Teil des Codes, die ich geschrieben habe, eine kleine Menge von Daten mit:

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

Die Schleife läuft und funktioniert perfekt für kleine:

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 

Dies ist das Ergebnis gibt Setzt wie oben, dh die Gesamtzahl der Spalten für X und PositionLoadArray (max. Werte für x und y) sind klein. Die Schleife benötigt jedoch Stunden, um mit größeren Werten ausgeführt zu werden.

Wie kann ich die Ausführungszeit reduzieren und das gleiche Ergebnis erzielen?

Antwort

0

Versuchen

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

@ Matt Du hast Recht es nicht ist. Der obige Code in der Frage ist jedoch definitiv in Octave und nicht in MATLAB geschrieben. Die Funktion "columns" ist nur in Octave verfügbar, die die Gesamtzahl der Spalten in einer Matrix zurückgibt. Ich habe das MATLAB-Tag entfernt. – rayryeng

+0

@rcpinto Das gibt mir das gleiche Ergebnis, als ob mein Code 'if PositionLoadArray (1, any (y)) == X (1, ​​x)' sagte. Was es getan hat, als du die Frage gelesen hast. Ich denke, die Person, die meine Frage bearbeitet hat, hat diesen Teil hinzugefügt. Wissen Sie, wie Sie das Problem jetzt beheben können? –

+0

@rayryeng Schöner Fang. Es ist eindeutig Octave, die OP hat die Frage entsprechend bearbeitet. – Matt