【问题标题】:Extracting a list of values from an array faster更快地从数组中提取值列表
【发布时间】:2016-03-14 15:39:21
【问题描述】:

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

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

【问题讨论】:

    标签: arrays matlab


    【解决方案1】:

    您可以使用sub2ind 将下标转换为absolute (linear) indices,然后使用这些线性索引来获取T 的特定值。

    indices = sub2ind(size(T), ind(:,1), ind(:,2), ind(:,3));
    output = T(indices)
    
        100
          3
         50
        200
    

    如果你需要做相反的转换,它的姊妹函数ind2sub 反过来。

    【讨论】:

      猜你喜欢
      • 2022-07-04
      • 2018-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多