如何在numpy.ndarray中找到最后一次出现的最大值

时间:2012-01-07 09:05:38

标签: numpy scipy

我有一个numpy.ndarray,其中最大值将多次出现。

编辑:这与numpy.argmax: how to get the index corresponding to the *last* occurrence, in case of multiple occurrences of the maximum values略有不同,因为作者说

  

或者,更好的是,是否可以获得数组中所有最大值出现的索引列表?

而在我的情况下,获得这样的列表可能会证明非常昂贵

是否可以使用numpy.argmax之类的内容找到最后一次出现的最大值的索引?我想找到最后一次出现的索引,而不是所有出现的数组(因为可能有几百个)

例如,这将返回第一次出现的索引,即2

import numpy as np
a=np.array([0,0,4,4,4,4,2,2,2,2])
print np.argmax(a)

但我希望它输出5。

2 个答案:

答案 0 :(得分:22)

numpy.argmax仅返回第一次出现的索引。您可以将argmax应用于数组的反转视图:

import numpy as np
a = np.array([0,0,4,4,4,4,2,2,2,2])
b = a[::-1]
i = len(b) - np.argmax(b) - 1
i     # 5
a[i:] # array([4, 2, 2, 2, 2])

注意numpy不会复制数组,而是创建一个原始视图,其中stride以相反的顺序访问它。

id(a) == id(b.base) # True

答案 1 :(得分:1)

如果您的数组是由整数组成,并且少于1e15行。您还可以通过添加一个噪声函数来解决此问题,该函数线性增加以后出现的值。

>>>import numpy as np
>>>a=np.array([0,0,4,4,4,4,2,2,2,2])
>>>noise= np.array(range(len(a))) * 1e-15
>>>print(np.argmax(a + noise))
5