MATLAB: How to vectorize this simple for loop

indexingvectorization

Given a 3D array:
a = rand(10, 10, 10);
and an integer index array:
idx = ceil(10 * rand(3, 1000));
is there a way (a clever indexing trick?) to vectorize the following loop:
b = zeros(1, 1000);
for i = 1:1000
b(i) = a(idx(1, i), idx(2, i), idx(3, i));
end
Thanks!

Best Answer

ii=sub2ind(size(a),idx(:,1),idx(:,2),idx(:,3));
b =a(ii)