Poszukuję eleganckiego rozwiązania tego bardzo prostego problemu w MATLAB. Załóżmy, że mam matrycęMATLAB: wyodrębnij submatrix z logicznym indeksowaniem
>> 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
i logiczną zmienną postaci
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
Gdy próbuję odzyskać elementy M
związane do 1
wartości w I
, mam wektor kolumnowy
>> M(I)
ans =
5
6
7
13
Jaki byłby najprostszy sposób uzyskania macierzy [5 7 ; 6 13]
z tego indeksowania logicznego?
Jeśli znam kształt niezerowych elementów I
, mogę użyć zmiany kształtu po indeksowaniu, ale nie jest to przypadek ogólny.
Ponadto zdaję sobie sprawę, że domyślne zachowanie dla tego typu indeksowania w MATLAB wymusza spójność w odniesieniu do przypadku, w którym niezerowe wartości w I
nie tworzą macierzy, ale zastanawiam się, czy istnieje prosty rozwiązanie dla tego konkretnego przypadku.
Tylko to, co miałem zamiar odpowiedzieć :-) –
To nie działa zawsze dobrze, na przykład gdy nie są symetryczne. – rst
@RobertStettler Jeśli masz na myśli matrycę "Ja" nie można zrobić losowo, to prawda, ale patrząc na pytanie uważam, że jest to rozsądne ograniczenie. Jeśli masz na myśli coś innego: nie rozumiem, w jaki sposób symetria jest tutaj istotna, czy mógłbyś przedstawić przykład, w którym rozwiązanie się nie udaje? (Macierz wejściowa, wyjście, oczekiwane wyjście). –