MATLAB: Reshape function with index 1

MATLABreshape

Hey
I have an array, let say
A=[1 0 ; 0 1];
And I want to increase its size, that is, to make it a 2x2x1 array:
B=reshape(A,[2 2 1])
However, the reshape keep fixing my size at 2×2.
Do you know how to make it work?

Best Answer

Reshape worked perfectly.
In fact, you never had to do any reshape at all. Why is that?
Because ALL arrays in MATLAB are assumed to have infinitely many trailing singleton dimensions. So a 2x2 array actually has dimension 2x2x1x1x1x1x1x1...
All that is reported for 2-d arrays are the first two dimensions. So your 2x2x1 array really is the size you wanted.
A = eye(2);
A(2,2,1)
ans = 1
So in fact, MATLAB does recognize that A can be indexed already using the third dimension, even when it reports A as being 2x2.
size(A)
ans = 1×2
2 2
size(reshape(A,[2 2 1]))
ans = 1×2
2 2
If we force A to have a non-singleton third dimension, this of course works.
size(reshape(A,[1 2 2]))
ans = 1×3
1 2 2
As you see, now MATLAB knows the result does have 3 dimensions. It always did know that though.
A = eye(2);
A(1,2,1,1,1,1,1,1,1,1)
ans = 0