我知道这是一个简单的问题,但很难用一句话来表达答案。所以,我有一个像这样的大小为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
如何在一行中没有循环?
答案 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)