我有一个多维数组,例如:
T(1:3,1:3,1) = magic(3);
T(1:3,1:3,2) = 10 * magic(3);
T(1:3,1:3,3) = 100 * magic(3);
现在我想从T
中提取某些值。这些值的位置以矩阵形式给出:
ind = [1,2,3;2,1,1;2,2,2;3,3,3];
所以第一个值应该是T(1,2,3),第二个应该是T(2,1,1),依此类推。
现在我正按以下方式进行:
for n=1:4
output(n,1)=T(ind(n,1),ind(n,2),ind(n,3));
end
output
应该在哪里
100
3
50
200
但这真的很慢,因为我实际上有更大的阵列。有没有办法以矢量化方式访问值?
类似于:
output(1:4,1)=T( ind(1:4,1:3) )
答案 0 :(得分:3)
您可以使用sub2ind
将下标转换为absolute (linear) indices,然后使用这些线性索引获取T
的特定值。
indices = sub2ind(size(T), ind(:,1), ind(:,2), ind(:,3));
output = T(indices)
100
3
50
200
如果你需要进行相反的转换,它的姐妹函数ind2sub
会反过来。