我有一个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。
答案 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