Matlab n-d索引

时间:2014-02-24 11:49:50

标签: matlab

我有一个大小为[4 1 10 128]的数据矩阵,我有一个大小为[1 1 10 128]的索引矩阵。

索引矩阵中的每个元素都是1到4范围内的数字,表示在数据矩阵的第一维中选择了哪个元素。

现在我想创建所选元素的矩阵,例如d = data(idx)

这不起作用,我认为因为matlab期待线性索引?

没有循环的任何其他方式吗? 感谢。

循环解决方案:

for i=1:size(idx,3)
  for j=1:size(idx,4)
    ind = idx(1,1,i,j);
    d(1, 1, i, j) = data(ind, 1, i, j);
  end
end

2 个答案:

答案 0 :(得分:1)

我认为使用reshape可以在这里提供帮助

tmp = reshape( data, size(data,1), [] );
d = tmp( sub2ind( size(tmp) ), idx(:), 1:size(tmp,2) );

答案 1 :(得分:1)

[ii jj] = ndgrid(1:size(idx,3),1:size(idx,4));
d = data(sub2ind(size(data), squeeze(idx), ones(size(idx,3), size(idx,4)), ii, jj));
d = shiftdim(d, -2);