【问题标题】:Finding maxima in 2D matrix along certain dimension with indices在具有索引的特定维度上查找二维矩阵中的最大值
【发布时间】:2014-05-22 21:27:48
【问题描述】:

我有一个<206x193> 矩阵A。它包含 193 个时间步长、206 个不同位置的参数值。我对所有时间每个位置的最大值以及相应的索引感兴趣。我有另一个矩阵B,其尺寸与A 相同,我对每个位置的值感兴趣,当时A 在该位置的值最大。

我试过[max_val pos] = max(A,[],2),它给出了正确的最大值,但A(pos) 不等于max_val

这个函数究竟是如何工作的?

我也尝试了一个较小的示例。我仍然不明白索引的含义....

>> H

H(:,:,1) =

     1     2
     3     4

H(:,:,2) =

     5     6
     7     8

>> [val pos] = max(H,[],2)

val(:,:,1) =

     2
     4

val(:,:,2) =

     6
     8

pos(:,:,1) =

     2
     2

pos(:,:,2) =

     2
     2

【问题讨论】:

    标签: matlab matrix multidimensional-array indexing max


    【解决方案1】:

    idx 中的索引表示对应行中最大值的索引。如果要测试是否A(pos)=max_val,可以使用sub2ind创建线性索引

    A=rand(206, 193);
    [max_val, idx]=max(A, [], 2);
    A_max=A(sub2ind(size(A), (1:size(A,1))', idx));
    

    同样,您可以通过以下方式访问 B 的值:

    B_Amax=B(sub2ind(size(A), (1:size(A,1))', idx));
    

    从你的例子:

    H(:,:,2) =
    
     5     6
     7     8
    
    [val pos] = max(H,[],2)
    
    val(:,:,2) =
    
     6
     8
    
    pos(:,:,2) =
    
     2
     2
    

    pos(:,:,2) 之所以为[2; 2],是因为最大值在两行的位置 2。

    【讨论】:

      【解决方案2】:

      max 主要用于向量。在普通模式下,即使是多维数组也被视为一系列向量,沿这些向量应用 max 函数。

      因此,要在 A 为最大值时在每个位置获取 B 中的值,您应该

      // find the maximum values and positions in A
      [c,i] = max(A, [], 2);
      // iterate along the first dimension, to retrieve the corresponding values in B
      C = [];
      for k=1:size(A,1)
          C(k) = B(k,i(k));
      end
      

      您可以参考@Jigg 的答案以获得更简洁的创建矩阵 C 的方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-18
        • 1970-01-01
        • 1970-01-01
        • 2017-05-21
        • 1970-01-01
        相关资源
        最近更新 更多