【问题标题】:Finding indexes of maximum values of an array查找数组最大值的索引
【发布时间】:2015-09-19 15:14:19
【问题描述】:

如何在 MATLAB 中找到一维数组的 2 个最大值的索引?我的是一个包含不同分数列表的数组,我想打印 2 个最高分数。

【问题讨论】:

  • 使用sort 并选择最后两个值
  • 嘿,谢谢,但是当我进行排序时,索引会发生变化,您能说得更具体一点吗?
  • 期望的输出是什么?值、索引,还是两者兼而有之?
  • @Spen 我不同意那个提议的副本,因为那里的解决方案只给出 one 索引,这对于minmax 的第二个输出确实很容易.获得 second 最大值需要扩展副本的答案(请参阅烧杯的答案)或完全不同的方法(请参阅 Luis 的 sort 方法)。

标签: arrays matlab


【解决方案1】:

您可以按照@LuisMendo 的建议使用sort

[B,I] = sort(array,'descend');

这为您提供了变量Barray 的排序版本以及I 中原始位置的索引,从高到低排序。因此,B(1:2) 为您提供最高的两个值,I(1:2) 在您的array 中为您提供它们的索引。

【讨论】:

    【解决方案2】:

    我会选择O(k*n) 解决方案,其中k 是您要查找的最大值的数量,而不是O(n log n)

    x = [3 2 5 4 7 3 2 6 4];
    y = x; %// make a copy of x because we're going to modify it
    [~, m(1)] = max(y);
    y(m(1)) = -Inf;
    [~, m(2)] = max(y);
    
    m =
    
       5   8
    

    这仅在k 小于log n 时才实用。事实上,如果k>=3 我会把它放在一个循环中,这可能会冒犯一些人的敏感性。 ;)

    【讨论】:

      【解决方案3】:

      要获取两个最大元素的索引:使用sort 的第二个输出来获取排序后的索引,然后选择最后两个:

      x = [3 2 5 4 7 3 2 6 4];
      [~, ind] = sort(x);
      result = ind(end-1:end);
      

      在这种情况下,

      result =
           8     5
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        • 2021-06-20
        • 1970-01-01
        • 2011-09-30
        • 1970-01-01
        相关资源
        最近更新 更多