12

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.

SCFrench
  • 8,244
  • 2
  • 31
  • 61
Tomas Aschan
  • 58,548
  • 56
  • 243
  • 402

3 Answers3

14

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.

abcd
  • 41,765
  • 7
  • 81
  • 98
2
reshape(myArray(myIndex,:,:),[100,50])
Tomas Aschan
  • 58,548
  • 56
  • 243
  • 402
fdermishin
  • 3,519
  • 3
  • 24
  • 45
0

squeeze, reshape and permute are probably the three most important functions when dealing with N-D matrices. Just to have an example how to use the third function:

A=randn(4,50,100);
B=permute(A(1,:,:),[2,3,1])
Community
  • 1
  • 1
Daniel
  • 36,610
  • 3
  • 36
  • 69