2013-07-10 41 views
30

我試圖找到一個函數,返回全部在給定列表中出現的最大值。如何使numpy.argmax返回所有最大值?

numpy.argmax但是隻返回找到的第一個事件。例如:

from numpy import argmax 

list = [7, 6, 5, 7, 6, 7, 6, 6, 6, 4, 5, 6] 
winner = argmax(list) 

print winner 

只給出索引0。但我想讓它給所有指數:0, 3, 5

回答

43

由於文檔np.argmax說:「在多次出現最大值的情況下,返回與第一次出現相對應的索引。」,所以你需要另一個策略。你已經在使用組合與np.argwherenp.amax

一個選項:

>>> import numpy as np 
>>> list = [7, 6, 5, 7, 6, 7, 6, 6, 6, 4, 5, 6] 
>>> winner = np.argwhere(list == np.amax(list)) 
>>> print winner 
[[0] 
    [3] 
    [5]] 
>>> print winner.flatten().tolist() # if you want it as a list 
[0, 3, 5] 
+1

很容易被'amax'中的'a'弄糊塗了:它代表'array',而不是'arg'。使用'max'(amax'的別名)比'amax'本身更好。 – dbliss

0

簡單多了......

列表[列表== np.max(名單)

+0

是的,但使用argwhere返回最大值的出現次數,這是@Marieke_W要求的 – Dai