我有一个大小为[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
答案 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);