2014-02-24 88 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