MATLAB: Auszug submatrix mit logischen Indizierung
Ich bin auf der Suche nach einer eleganten Lösung für dieses sehr einfache problem in MATLAB. Angenommen ich habe eine matrix
>> M = magic(5)
M =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
und eine logische variable der form
I =
0 0 0 0 0
0 1 1 0 0
0 1 1 0 0
0 0 0 0 0
0 0 0 0 0
Wenn ich versuche, die Elemente abzurufen, der M
zugeordnet 1
Werte in I
bekomme ich einen Spalten-Vektor
>> M(I)
ans =
5
6
7
13
Was wäre der einfachste Weg, um die matrix [5 7 ; 6 13]
von diesem logischen Indizierung?
Wenn ich weiß, dass die Form der nicht-null-Elemente von I
, ich kann mit einer Umgestaltung nach der Indizierung, aber das ist keine Allgemeine Fall.
Auch, ich bin mir bewusst, dass das Standardverhalten für diese Art der Indizierung in MATLAB erzwingt Konsistenz in Bezug auf den Fall, in dem nicht-null-Werte in I
nicht in form einer matrix, aber ich Frage mich, ob es gibt eine einfache Lösung für diesen speziellen Fall.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein Weg, dies zu tun. Es wird davon ausgegangen, dass alle Zeilen von
I
haben die gleiche Anzahl von Einsen. Es ist auch davon auszugehen, dass alle Spalten derI
haben die gleiche Anzahl haben, weilSubmatrix
müssen rechteckig sein.Hier ist eine sehr einfache Lösung:
I
können nicht gemacht werden, nach dem Zufallsprinzip, das ist wahr, aber mit Blick auf die Frage, die ich denke, das ist eine sinnvolle Einschränkung. Wenn Sie etwas anderes meinen: ich sehe nicht, wie symetry ist hier relevant, hättest du vielleicht ein Beispiel, wo die Lösung nicht? (Matrix-Input, output, erwartete Ausgabe).I
nicht symmetrisch ist, erhalten Sie einige Probleme mit der formT
. In der Tat, ich glaube, Sie können korrigieren Sie die Antwort, indem einfach die erste Zeile um:T = I(any(I'), any(I));
. Versuchen Sie Ihre Lösung mit der in diesem Beispiel matrix-input:I = zeros(5);I(1:4, 2:3) = 1;