How to make numpy.argmax return all occurrences of the maximum?

后端 未结 3 985
误落风尘
误落风尘 2020-12-03 06:30

I\'m trying to find a function that returns all occurrences of the maximum in a given list.

numpy.argmax however only returns the first occurrence that it f

相关标签:
3条回答
  • 2020-12-03 06:48

    Much simpler...

    list[list == np.max(list)]

    0 讨论(0)
  • 2020-12-03 06:58

    As documentation of np.argmax says: "In case of multiple occurrences of the maximum values, the indices corresponding to the first occurrence are returned.", so you will need another strategy.

    One option you have is using np.argwhere in combination with np.amax:

    >>> import numpy as np
    >>> listy = [7, 6, 5, 7, 6, 7, 6, 6, 6, 4, 5, 6]
    >>> winner = np.argwhere(listy == np.amax(listy))
    >>> print(winner)
     [[0]
      [3]
      [5]]
    >>> print(winner.flatten().tolist()) # if you want it as a list
    [0, 3, 5]
    
    0 讨论(0)
  • 2020-12-03 07:11

    In case it matters, the following algorithm runs in O(n) instead of O(2n) (i.e., using np.argmax and then np.argwhere):

    def allmax(a):
        if len(a) == 0:
            return []
        all_ = [0]
        max_ = a[0]
        for i in range(1, len(a)):
            if a[i] > max_:
                all_ = [i]
                max_ = a[i]
            elif a[i] == max_:
                all_.append(i)
        return all_
    
    0 讨论(0)
提交回复
热议问题