2013-07-10 38 views
30

Tôi đang cố gắng tìm một hàm trả về tất cả lần xuất hiện tối đa trong một danh sách nhất định.Làm thế nào để làm cho numpy.argmax trả về tất cả các lần xuất hiện tối đa?

numpy.argmax tuy nhiên chỉ trả về lần xuất hiện đầu tiên mà nó tìm thấy. Ví dụ:

from numpy import argmax 

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

print winner 

chỉ cung cấp chỉ mục 0. Nhưng tôi muốn nó cung cấp cho tất cả các chỉ số: 0, 3, 5.

Trả lời

43

Là tài liệu của np.argmax nói: "Trong trường hợp xảy ra nhiều lần giá trị tối đa, các chỉ số tương ứng với lần xuất hiện đầu tiên được trả về"., vì vậy bạn sẽ cần một chiến lược khác.

Một tùy chọn mà bạn đã được sử dụng np.argwhere kết hợp với np.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

thật dễ dàng để bị lẫn lộn bởi 'a' trong' amax': nó là viết tắt của 'mảng', không phải' arg'. người ta có thể sử dụng 'max' (một bí danh cho' amax') tốt hơn là 'amax'. – dbliss

0

đơn giản hơn nhiều ...

danh sách [danh sách == np.max (danh sách)]

+0

Có, nhưng sử dụng argwhere trả về các chỉ số về số lần xuất hiện tối đa, đó là những gì @Marieke_W yêu cầu – Dai

Các vấn đề liên quan