Indexing a 4D array with a 2D matrix of indicies

ε祈祈猫儿з 提交于 2019-12-01 20:20:25

This uses implicit expansion to build a linear index that produces the desired result:

matrix4D = rand(4,2,3,5); % example matrix
[h, w, c, n] = size(matrix4D); % sizes
index = randi(n,h,w); % example index
ind = reshape(1:h*w,h,w) + reshape((0:c-1)*h*w,1,1,[]) + (index-1)*h*w*c; % linear index
imageOutput = matrix4D(ind); % desired result

For Matlab versions before R2016b you need to use bsxfun instead of implicit expansion:

ind = bsxfun(@plus, bsxfun(@plus, ...
    reshape(1:h*w,h,w), reshape((0:c-1)*h*w,1,1,[])), (index-1)*h*w*c); % linear index
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!