MATLAB: Using a vector as an index to a matrix

dimensionindexingmatrix

Hi,
I have a rather large Matrix A with the dimensions 100x100x3 as well as a vector b of dimensions 100×1 with values from 1 to 3.
Now I want to get a out of Matrix A a Matrix C with the dimensions 100x100x1 where b defines which elements along the third dimension of A should be used.
I was thinking of something along the lines of
C = A(:,:,b(:))
but this does not work the way I want.
This code does exactly what I want, but I would prefer to do it without a For-Loop:
for i = 1:100
C(i,:) = A(i,:,b(i));
end
Is it even possible to do without a for-Loop? I had a look at the sub2ind function, but could not get it to work in the way I wanted.
Thank you very much for any help.

Best Answer

[m,n,p] = size(A);
[I,J] = ndgrid(1:m,1:n);
C = A(sub2ind([m,n,p],I,J,b(I)))