更快地从数组中提取值列表

时间:2016-03-14 15:39:21

标签: arrays matlab

我有一个多维数组,例如:

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

1 个答案:

答案 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会反过来。