使用存储在另一个矩阵上的索引访问数据矩阵

时间:2019-02-04 08:33:44

标签: matlab matrix indexing

在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值。

1 个答案:

答案 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);