如何在matlab中从第三维选择第三矩阵中的特定索引

时间:2011-07-04 04:37:53

标签: matlab matrix indexing

我知道这是一个简单的问题,但很难用一句话来表达答案。所以,我有一个像这样的大小为2x2x3的3d矩阵

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

和矩阵B,大小为2x2

B = [ 1 2; 2 3];

我需要的是使用矩阵B从A中的每个第三维中选择一个数字:

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

如何在一行中没有循环?

2 个答案:

答案 0 :(得分:2)

不是一行,但没有循环:

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

答案 1 :(得分:1)

这是另一种变体:

[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)