Search code examples
arraysmatlabmultidimensional-arraymatrixn-dimensional

How do I get the two last dimensions of an N-D array as a 2D array?


I have a 3D array in MATLAB, with size(myArray) = [100 100 50]. Now, I'd like to get a specific layer, specified by an index in the first dimension, in the form of a 2D matrix. I tried myMatrix = myArray(myIndex,:,:);, but that gives me a 3D array with size(myMatrix) = [1 100 50].

How do I tell MATLAB that I'm not interested in the first dimension (since there's only one layer), so it can simplify the matrix?

Note: I will need to do this with the second index also, rendering size(myMatrix) = [100 1 50] instead of the desired [100 50]. A solution should be applicable to both cases, and preferably to the third dimension as well.


Solution

  • Use the squeeze function, which removes singleton dimensions.

    Example:

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

    This is generalized and you needn't worry about which dimension you're indexing along. All singleton dimensions are squeezed out.