开发者

how to select specific index in 3rd matrix from third dimention in matlab

I know this is a simple question but difficult to formulate in one sentence to google the answer.So, I have a 3d matrix with size 2x2x3 like this

A(:,:,1) =[1     1;  1    1];
A(:,:,2) =[2     2; 2     2];
A(:,:,3) =[4     4; 4     4];

and matrix 开发者_开发百科B with size 2x2

B = [ 1 2; 2 3];

What i need is to chose from each third dimension in A just one number using matrix B:

for i=1:2,
  for j=1:2,
    C(i,j) = A(i,j,B(i,j));
  end
end

How to that in one line without a loop?


Not really a single line, but without a loop:

[I J] = ind2sub (size(B), 1:numel(B));
linInd = sub2ind (size (A), I, J, B(:)');
C = reshape (A(linInd), size(B));


Here is another variation:

[r,c,~] = size(A);
[J,I] = meshgrid(1:size(B,1), 1:size(B,2));
idx = reshape(I(:) + r*(J(:)-1) + r*c*(B(:)-1), size(B));
C = A(idx)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜