数组 – 使用Matlab中的矩阵索引多维数组

如何通过使用2d矩阵来索引nd-array元素的维度,这些矩阵表示哪些维度(表示切片或2d矩阵)从中获取值?

I=ones(2)*2;
J=cat(3,I,I*2,I*3);

indexes = [1 3 ; 2 2] ;

所以J是

J(:,:,1) =

 2     2
 2     2


J(:,:,2) =

 4     4
 4     4


J(:,:,3) =

 6     6
 6     6

它使用2 for循环很容易

for i=1:size(indexes,1)
     for j=1:size(indexes,2)
        K(i,j)=J(i,j,indexes(i,j));
    end
end

这产生了期望的结果

K =

 2     6
 4     4

但有没有矢量化/智能索引方式这样做?

%K=J(:,:,indexes)  --does not work
最佳答案
只需使用linear indexing

nElementsPerSlice = numel(indexes);

linearIndices = (1:nElementsPerSlice) + (indexes(:)-1) * nElementsPerSlice;

K = J(linearIndices);

转载注明原文:数组 – 使用Matlab中的矩阵索引多维数组 - 代码日志