Matlab die Indizierung in 2D-array mit
Ich habe eine 2D matrix, sagen wir M=zeros(10,10);
Habe ich eine andere Spalte der matrix, V=[1;2;3;4;5;6;5;4;3;2];
Ich würde gerne in der Lage sein zu set M(i,j) = 1 für alle j >= V(i)
Ich weiß kann ich dies in eine Schleife
for i=1:10
M(i,V(i):10) = 1;
end
aber es scheint, dass es möglich wäre die Verwendung einer form von Matlab-Indizierung zu vermeiden, die mit einer Schleife. Zum Beispiel so etwas wie :
M(:,V:10)=1;
oder
M(:,V(:):10)=1;
aber weder von diesen produziert das erwartete Ergebnis.
Gibt es einige syntaktische Zucker ich verwenden können, um dies zu erreichen, oder sollte ich wieder Schleife?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Sie bist suchen für syntaktischen Zucker, hier ist eine Art von esoterischen Weg, es zu tun. 🙂
Vorausgesetzt, die Länge der
V
ist die Größe der beiden Dimensionen in die gewünschte matrixM
erstellen Sie zuerst eine identity-matrix der gleichen Größe), dann ist index entsprechend und nehmencumsum
:Ok, jetzt: weniger Spaß, aber (auf meiner Maschine) schneller als alle anderen Optionen geprüft wurden bisher:
Seine kaum subtiler und nicht wirklich besser als eine Schleife, ich glaube nicht, aber:
Genießen.
Habe ich versucht, das loop-Methode, und die 'meshgrid' - Methode. Ich Frage mich, über die Zeit zu berechnen, die für große Matrizen (seit das Problem mit Schleifen in matlab ist in der Regel die Zeit).
Zuerst optimierte ich den code wie folgt Aussehen :
Eigentlich N eine meshgrid, aber es scheint viel schneller zu tun, es auf diese Weise...
Habe ich versucht, dieses :
Und Ergebnisse waren :
Aber Methoden mit Hilfe von Matrizen anstelle von Schleifen sind Speicher für große n. Ich würde personnaly stick der Schleife.
M
wird eine logische matrix, es sei denn, Sie warf es zu verdoppeln, das wird Sie verlangsamen.versuchen Sie dies: