【问题标题】:find value in array according to the row and column number根据行号和列号在数组中查找值
【发布时间】:2017-08-27 18:43:21
【问题描述】:

我有两个矩阵A和B,矩阵A(1,:)=[1 2]的第一行是指矩阵B(1,2)=21的行数和列数,现在我想做这适用于没有循环的另一行矩阵 A?

A=[1 2;2 3;1 3;3 3];
B=[1 21 34;45 65 87;4 55 66];
for i=1:4
d(i,:)=B(A(i,1),A(i,2))
end
d =[21; 87;34;66] 

【问题讨论】:

  • 当 size(A,1) 太大时,上述解决方案均无效。背后的原因是上述所有解决方案都意味着创建一个尺寸为 size(A,1) x size(A,1) 的矩阵。见stackoverflow.com/questions/60477249/…

标签: arrays matlab loops matrix matrix-indexing


【解决方案1】:

使用sub2ind 获取B 所需值的线性索引,然后使用这些索引检索这些值。

d = B(sub2ind(size(B), A(:,1), A(:,2)));

>> d

d =

    21
    87
    34
    66

【讨论】:

    【解决方案2】:

    sub2ind 的替代方案是

    d = B(A(:,1)+ (A(:,2)-1)*size(B,1));
    

    【讨论】:

      【解决方案3】:

      我想下面的代码一定适合你:

      A=[1 2;2 3;1 3;3 3];
      B=[1 21 34;45 65 87;4 55 66];
      d=diag(B(A(:,1),A(:,2)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-24
        • 2012-04-28
        • 2021-11-29
        相关资源
        最近更新 更多