在matlab中,我通常有一个大小为NxMxLxK的数据矩阵,我希望使用尺寸为NxMxL且值为1..K的索引矩阵沿特定维度(例如第四维度)进行索引(假设所有值均在此范围内) :
>>> size(Data)
ans =
7 22 128 40
>>> size(Ind)
ans =
7 22 128
我希望没有循环的代码可以达到以下效果:
Result(i,j,k) = Data(i,j,k,Ind(i,j,k))
对于范围内的所有i,j,k值。
答案 0 :(得分:3)
您可以向量化矩阵并使用sub2ind
:
% create indices that running on all of the options for the first three dimensions:
A = kron([1:7],ones(1,22*128));
B = repmat(kron([1:22],ones(1,128)),1,7);
C = repmat([1:128],1,7*22);
Result_vec = Data(sub2ind(size(Data),A,B,C,Ind(:)'));
Result = reshape(Result_vec,7,22,128);