2010-08-27 24 views

Trả lời

110

Phương pháp argmax() sẽ hữu ích.

Cập nhật

(Sau khi đọc bình luận) Tôi tin rằng phương pháp argmax() sẽ làm việc cho mảng đa chiều là tốt. Các tài liệu liên quan cho một ví dụ về điều này:

>>> a = array([[10,50,30],[60,20,40]]) 
>>> maxindex = a.argmax() 
>>> maxindex 
3 

Cập nhật 2

(Nhờ KennyTM 's bình luận) Bạn có thể sử dụng unravel_index(a.argmax(), a.shape) để có được chỉ số như một tuple:

>>> from numpy import unravel_index 
>>> unravel_index(a.argmax(), a.shape) 
(1, 0) 
+1

Nhưng tôi có một mảng đa chiều. – kame

+0

@kame: câu trả lời được cập nhật. Xem ở trên. –

+50

Sử dụng 'unravel_index (a.argmax(), a.shape)' để lấy chỉ mục làm bộ tuple. – kennytm

4

(chỉnh sửa) Tôi đã đề cập đến câu trả lời cũ đã bị xóa. Và câu trả lời được chấp nhận đến sau tôi. Tôi đồng ý rằng argmax tốt hơn câu trả lời của tôi.

Nó sẽ không dễ đọc hơn/trực quan để làm như thế này?

numpy.nonzero(a.max() == a) 
(array([1]), array([0])) 

Hoặc,

numpy.argwhere(a.max() == a) 
+4

Không cần thiết chậm, bởi vì bạn tính toán tối đa và sau đó so sánh nó với tất cả a. unravel_index (a.argmax(), a.shape). – Peter

+0

Tôi đã bình chọn cho điều này vì nó không giả định về số lần xuất hiện của a.max() trong a. Trong khi a.argmax() sẽ trả về sự xuất hiện "đầu tiên" (được xác định không đúng trong trường hợp mảng đa chiều vì nó phụ thuộc vào sự lựa chọn đường dẫn truyền tải). https://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html#numpy.argmax Tôi cũng nghĩ np.where() là tự nhiên/dễ đọc hơn là np.nonzero(). – FizxMike

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