2014-02-24 117 views
1

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

在索引矩阵中的每个元素是在范围内的数为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 
+0

在'data'大小数和'idx'矩阵真的它们的尺寸?如果是这样,他们为什么不同,1s的含义是什么? – McMa

+1

只是一般性评论:最好[不要在Matlab中使用'i'和'j'作为变量名](http://stackoverflow.com/questions/14790740/using-i-and-j-as-variables -in-MATLAB)。 – Shai

回答

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); 
1

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

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

我试过了,它似乎没有工作。 – Ran