MATLAB: Sub2ind, picking specific values from a 3d matrix

sub2ind

I have a 500x8x4 matrix, lets call this X, and I have a 500×1 vector, lets call it Y, the latter contains numbers between 1 and 8. These numbers indicate the number in each row that I want from the matrix X. So by picking a number in each row of matrix X, I need to get a matrix that is 500×4, lets call it Z. I dont know how to get this vector Z, in a quick way (not using a loop). I know I should do it with sub2ind but I dont know how. Thank you for your help.

Best Answer

sub2ind is slow, if you want performance, use a for-loop.
% Data
X = randn(500,8,4); % z
Y = randi(8,500,1); % idx
% Engine
szX = size(X);
Z = zeros(szX([1 3]));
for ii = 1:szX(1)
Z(ii,:) = X(ii,Y(ii),:);
end
On my machine, the engine on here is taking about 1/1000 of a second.