MATLAB: Need help removing this for loop

for loopvectorization

This is the last step in vectorizing my code, but I just can't see how to get rid of the pesky for loop. Any assistance is appreciated.
I've replaced the variables with numbers for a more readable example.
%size(Cp) = [5,3,100]
%size(Tr) = [2e4,100]
A = zeros(5,2e4,100);
for ii = 1:100
A(:,:,ii) = Cp(:,Tr(:,ii),ii);
end

Best Answer

If I got my calculations right, then:
A = Cp( bsxfun(@plus, (1:size(Cp,1)).', bsxfun(@plus, (Tr - 1) * size(Cp,1), ((1:size(Cp,3)-1) * size(Cp,1) * size(Cp,2)) ) );
This is difficult to read and difficult to write. I cannot recommend it unless perhaps run time is very important -- and even then considering the size of the internal matrices involved and the number of operations used to construct them, I would tend to doubt that it is more efficient.
Your existing code with a loop is easier to read and probably nearly as efficient, possibly more efficient.
This is one of those cases where the goal to "vectorize" requires constructing large intermediate arrays and use calculations that have no obvious meaning. Since typically more time is spent programming and debugging and documenting than is spent in execution of a program, it is unlikely that you would be gain anything meaningful by vectorization.
Related Question