2013-09-02 32 views
21

Tôi hơi bối rối khi đọc tài liệu của argmin function in numpy. Có vẻ như nó nên thực hiện công việc:Cách trả lại tất cả các chỉ số tối thiểu theo số

Reading này

Return các chỉ số của các giá trị tối thiểu cùng một trục.

Tôi có thể giả định rằng

np.argmin([5, 3, 2, 1, 1, 1, 6, 1]) 

sẽ trả về một mảng của tất cả các chỉ số: đó sẽ là [3, 4, 5, 7]

Nhưng thay vì điều này nó chỉ 3 trả. Đâu là bắt, hoặc tôi nên làm gì để có được kết quả của tôi?

Trả lời

31

Tài liệu đó có ý nghĩa hơn khi bạn suy nghĩ về mảng đa chiều.

>>> x = numpy.array([[0, 1], 
...     [3, 2]]) 
>>> x.argmin(axis=0) 
array([0, 0]) 
>>> x.argmin(axis=1) 
array([0, 1]) 

Với một trục nhất định, argmin mất subarrays một chiều dọc theo trục nhất định và trả về chỉ số đầu tiên của giá trị tối thiểu của mỗi mảng con. Nó không trả về tất cả các chỉ số của một giá trị nhỏ nhất.

Để có được tất cả các chỉ số của giá trị tối thiểu, bạn có thể làm

numpy.where(x == x.min()) 
13

Xem tài liệu cho numpy.argmax (được gọi bằng các tài liệu cho numpy.argmin):

Trong trường hợp nhiều lần xuất hiện của các giá trị tối đa, các chỉ số tương ứng với sự xuất hiện lần đầu tiên được trả về.

Cách phân biệt tài liệu ("chỉ mục" thay vì "chỉ mục") đề cập đến trường hợp đa chiều khi axis được cung cấp.

Vì vậy, bạn không thể làm điều đó với np.argmin. Thay vào đó, điều này sẽ hoạt động:

np.where(arr == arr.min()) 
Các vấn đề liên quan