问题
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.
回答1:
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.
回答2:
reshape(myArray(myIndex,:,:),[100,50])
回答3:
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])
来源:https://stackoverflow.com/questions/5720062/how-do-i-get-the-two-last-dimensions-of-an-n-d-array-as-a-2d-array