【问题标题】:How to get MATLAB to display the index of the minimum value in a 2D array?如何让 MATLAB 显示二维数组中最小值的索引?
【发布时间】:2011-02-22 10:08:05
【问题描述】:

我正在尝试在 MATLAB 中编写一个脚本来查找二维数字数组的最小值的位置。我确信这个数组中只有 1 个最小值,因此数组中有多个位置具有相同的最小值不是问题。我可以找到数组的最小值 value,但是在 30x30 的数组中,我想知道最小值在哪一行和哪一列。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    作为替代版本,结合 min 获得最小值并 find 返回索引,如果您已经计算了最小值,则只需使用 find。

    >> a=magic(30);
    >> [r,c]=find(a==min(min(a)))
    
    r =
         1
    c =
         8
    

    或者根据您希望如何使用位置信息,您可能希望使用逻辑数组来定义它,在这种情况下,可以使用逻辑寻址来为您提供一个真值表。

    >> a=magic(30);
    >> locn=(a==min(min(a)));
    

    【讨论】:

      【解决方案2】:

      您可以将矩阵重塑为向量,使用MIN 找到最小值的索引,然后将此线性索引转换为矩阵索引:

      >> x = 兰迪(5, 5) x = 5 4 4 2 4 4 2 4 5 5 3 1 3 4 3 3 4 2 5 1 2 4 5 3 5 >> [值,索引] = min(reshape(x, numel(x), 1)); >> [i,j] = ind2sub(大小(x), 索引) 我 = 3 j = 2

      【讨论】:

      • 你可以使用 x(:) 代替 reshape() 来节省一些字符。
      • @zellus:谢谢你提醒我!我有一种挥之不去的感觉,就是有另一种方法可以做到这一点。
      【解决方案3】:

      查看min函数的描述。它可以返回最小值以及索引。对于二维数组,调用两次即可。

      A = rand(30); % some matrix
      [minColVal, minColIdx] = min(A);
      [minRowVal, minRowIdx] = min(minColVal);
      
      minVal = minRowVal;
      minValIdx = [minColIdx(minRowIdx), minRowIdx];
      

      编辑:@b3 的解决方案可能在计算上更优雅(更快并且需要更少的临时空间)

      【讨论】:

        【解决方案4】:

        在向量的子集中找到最小值或最大值 - 如果A是一个向量并且“lowerBound”和“upperBound”是向量的边界,你需要在其中找到最大值(或最小值),那么使用这个命令-

        [Value,Index]=min(A(lowerBound:upperBound));
        

        这将返回“Value”作为 A(lowerBound) 和 A(uppedBound) 之间的最小值或最大值,并且 "Index" 与 "lowerBound" 作为偏移量。所以要找到绝对索引,需要在索引中添加“lowerBound”。

        【讨论】:

          【解决方案5】:

          使用内联函数的替代解决方案将起作用。

              >> min_index = @(matrix) find(matrix == min(reshape(matrix, [1,numel(matrix)])));
          
              >> a=magic(30);
              >> [r,c]=min_index(a)
          
              r =
                   1
          
              c =
                   8
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-08-31
            • 1970-01-01
            • 2016-02-24
            • 1970-01-01
            • 2015-07-22
            • 2020-06-20
            • 2014-06-12
            • 1970-01-01
            相关资源
            最近更新 更多