2011-04-19 20 views
12

Tengo una matriz 3D en MATLAB, con size(myArray) = [100 100 50]. Ahora, me gustaría obtener una capa específica, especificada por un índice en la primera dimensión ,, en forma de una matriz 2D. Intenté myMatrix = myArray(myIndex,:,:);, pero eso me da una matriz 3D con size(myMatrix) = [1 100 50].¿Cómo obtengo las dos últimas dimensiones de una matriz N-D como una matriz 2D?

¿Cómo le digo a MATLAB que no estoy interesado en la primera dimensión (ya que solo hay una capa), por lo que puede simplificar la matriz?

Nota: Necesitaré hacer esto con el segundo índice también, representando size(myMatrix) = [100 1 50] en lugar del [100 50] deseado. Una solución debe ser aplicable a ambos casos, y preferiblemente a la tercera dimensión también.

Respuesta

14

utilizar la función squeeze, que elimina dimensiones únicos.

Ejemplo:

A=randn(4,50,100); 
B=squeeze(A(1,:,:)); 
size(B) 

ans = 

    50 100 

Esta es generalizada y no tiene que preocuparse acerca de qué dimensión que está indexando a lo largo. Todas las dimensiones de singleton están exprimidas.

2
reshape(myArray(myIndex,:,:),[100,50]) 
+0

Brilliant! =) La comunidad SO es tan rápida como de costumbre. –

0

squeeze, reshape y permute son probablemente las tres funciones más importantes cuando se trata de matrices N-D. Solo para tener un ejemplo de cómo usar la tercera función:

A=randn(4,50,100); 
B=permute(A(1,:,:),[2,3,1]) 
Cuestiones relacionadas