Estoy buscando una solución elegante a este problema muy simple en MATLAB. Supongamos que tengo una matrizMATLAB: extraer submatriz con indexación lógica
>> 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
y una variable lógica de la forma
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
Si intento para recuperar los elementos de M
asociados a 1
valores en I
, consigo un vector columna
>> M(I)
ans =
5
6
7
13
¿Cuál sería la forma más sencilla de obtener la matriz [5 7 ; 6 13]
a partir de esta indexación lógica?
Si conozco la forma de los elementos distintos de cero de I
, puedo usar una nueva forma después de la indexación, pero no es un caso general.
Además, soy consciente de que el comportamiento predeterminado para este tipo de indexación en MATLAB impone coherencia con respecto al caso en el que los valores distintos de cero en I
no forman una matriz, pero me pregunto si hay un simple solución para este caso particular.
Justo lo que iba a contestar :-) –
que no funciona Allways, por ejemplo, cuando no simétrico – rst
@RobertStettler Si quiere decir que la matriz 'I' no se puede hacer al azar, eso es cierto, pero mirando la pregunta, creo que es una limitación razonable. Si quiere decir algo más: no veo cómo la simetría es relevante aquí, ¿podría presentar un ejemplo en el que la solución falla? (Matriz de entrada, salida, salida esperada). –