Sto cercando una soluzione elegante a questo problema molto semplice in MATLAB. Supponiamo di avere una matriceMATLAB: estrae la sottomatrice con l'indicizzazione logica
>> 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
e una variabile logica del modulo
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
Se si tenta di recuperare gli elementi di M
associate 1
valori I
, ho un vettore colonna
>> M(I)
ans =
5
6
7
13
Quale sarebbe il modo più semplice per ottenere la matrice [5 7 ; 6 13]
da questa indicizzazione logica?
Se conosco la forma degli elementi diversi da zero di I
, è possibile utilizzare una risagoma dopo l'indicizzazione, ma non è un caso generale.
Inoltre, sono a conoscenza del fatto che il comportamento predefinito per questo tipo di indicizzazione in MATLAB aumenta la coerenza rispetto al caso in cui i valori diversi da zero in I
non formano una matrice, ma mi chiedo se esiste un semplice soluzione per questo caso particolare.
Proprio quello che stavo per rispondere :-) –
che non funziona allways, per esempio quando non è simmetrico. – rst
@RobertStettler Se intendi che la matrice 'I' non può essere creata a caso, è vero, ma guardando la domanda penso che sia una ragionevole limitazione. Se intendi qualcos'altro: non vedo come la simmetria sia rilevante qui, potresti forse presentare un esempio in cui la soluzione fallisce? (Matrice di input, uscita, uscita prevista). –