2012-01-07 33 views
8

Tôi có một giá trị numpy.ndarray trong đó giá trị tối đa sẽ xảy ra nhiều lần.Cách tìm giá trị tối đa cuối cùng trong một numpy.ndarray

EDIT: Đây là một cách tinh tế khác nhau từ numpy.argmax: how to get the index corresponding to the *last* occurrence, in case of multiple occurrences of the maximum values vì tác giả nói

Hoặc, thậm chí tốt hơn, là nó có thể để có được một danh sách các chỉ số của tất cả các lần xuất hiện của giá trị lớn nhất trong mảng?

trong khi ở trường hợp của tôi nhận được một danh sách như vậy có thể chứng minh rất đắt

Có thể tìm thấy các chỉ số về sự xuất hiện cuối cùng của giá trị lớn nhất bằng cách sử dụng một cái gì đó giống như numpy.argmax? Tôi muốn tìm chỉ chỉ số về sự xuất hiện cuối cùng, không phải là một mảng của tất cả các lần xuất hiện (từ vài trăm có thể có mặt ở đó)

Ví dụ này sẽ trở lại với chỉ số về sự xuất hiện đầu tiên tức là 2

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

Tuy nhiên tôi muốn đầu ra 5.

+0

có thể trùng lặp với [numpy.argmax: cách nhận chỉ mục tương ứng với * lần xuất hiện * cuối cùng, trong trường hợp xảy ra nhiều giá trị tối đa] (http://stackoverflow.com/questions/7038975/ numpy-argmax-how-to-get-the-index-tương ứng-to-the-last-occurrence-in-ca) – outis

+0

Tác giả ở đó muốn chỉ mục của tất cả các lần xuất hiện và giải pháp được cung cấp ở đó 'occurrences = np.where (a == a.max()) 'sẽ tạo ra một mảng của tất cả các giá trị tối đa có thể rất tốn kém trong trường hợp của tôi –

+0

mặc dù câu trả lời chỉ là cách để có được tất cả các lần xuất hiện, người hỏi hỏi cả hai, do đó" có thể trùng lặp " thay vì "trùng lặp". – outis

Trả lời

14

numpy.argmax chỉ trả về chỉ mục của lần xuất hiện đầu tiên. Bạn có thể áp dụng argmax đến một cái nhìn đảo ngược của mảng:

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]) 

Note NumPy không sao chép mảng nhưng thay vì tạo ra một cái nhìn của bản gốc với một stride rằng truy cập nó theo thứ tự ngược lại.

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

Không có hàm tương đương nào nhận được chỉ mục của lần xuất hiện cuối cùng? Ngoài ra wont đảo ngược mảng là một hoạt động O (n), chưa kể đến việc sử dụng bộ nhớ tăng gấp đôi? –

+3

Nghi ngờ có một chức năng khác, vì chế độ xem ngược lại khá hiệu quả. – outis

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