2017-03-15 5 views
0

Ich habe eine Matrix X = [x1,y1;...;xn,yn]; und einen Vektor . Der Wert des Index liegt zwischen 1 und 5.Matlab Matrix-Betrieb ohne Schleife

Ich möchte X in 5 Matrix X1, ..., X5 gemäß dem Index zu teilen.

Ein Beispiel:

X = [1,1;2,2;3,3;4,4;5,5;6,6;7,7;8,8] und index = [1,2,3,5,4,4,5,1]

Also, ich will X1 = [1,1;8,8], X2 = [2,2] etc ...

Der Zustand ist nicht eine Schleife über X mit einem, wenn die Bedingung, um das zu minimieren zu verwenden, um Zeitpunkt der Ausführung, wenn es Milliarden von Punkten gibt.

Mit freundlichen Grüßen

Antwort

0

Sie eine Lookup-Funktion einfach verwenden können, um die Untermatrizen zugreifen Sie wollen:

X = [1,1;2,2;3,3;4,4;5,5;6,6;7,7;8,8]; 
index = [1,2,3,5,4,4,5,1]; 

[email protected](x)X(index==x,:); 
subX = arrayfun(Xi,1:5,'uniformoutput',0); 

Beachten Sie, dass arrayfun können die Lookup-Funktion auf jeden Index anwenden um alle resultierenden Matrizen in einem Zellenfeld zu speichern. Dann können sie mit zugegriffen werden:

subX{1} 

Welche Ausgänge:

1  1 
8  8 
0

Sie können logische Indexierung verwenden.

X1=X(index==1,:); % This will pick all rows of X for which index has the value 1 
X2=X(index==2,:); % and the same for X2 to X5 

Noch könnte es ordentlich sein, dies zu loopen. Besonders, wenn Sie einen Index-Array mit mehr Werte als nur 5.