MATLAB: How to simplify this command by avoiding cycle

matrixmatrix arraymatrix manipulation

At the end,I accept this code
destrows = repmat(ax, 1, 1,3);
destcols = repmat(ay, 1, 1,3);
[srcrows, srccols, srcpages] = ndgrid(1:iH, 1:iW, 1:3);
outImg(sub2ind(size(outImg), destrows, destcols, srcpages)) = tempImg(sub2ind(size(tempImg), srcrows, srccols, srcpages));
---
for x=1:iH
for y=1:iW
outImg(ax(x,y),ay(x,y),:)=tempImg(x,y,:);
end
end
Is it possible to use bsxfun?

Best Answer

bsxfun wouldn't work for this. sub2ind will, but it won't be pretty:
numpages = size(tempImg, 3);
destrows = repmat(ax(1:iH, 1:iW), 1, 1, numpages);
destcols = repmat(ay(1:iH, 1:iW), 1, 1, numpages);
destpages = repelem(permute(1:numpages, [1 3 2]), iH, iW);
[srcrows, srccols, srcpages] = ndgrid(1:iH, 1:iW, 1:numpages);
outImg(sub2ind(size(outImg), destrows, destcols, destpages)) = tempImg(sub2ind(size(tempImg), srcrows, srccols, srcpages));