Hướng dẫn dùng numpy argmin python

Theo np.argmaxmặc định, hàm hoạt động dọc theo mảng phẳng , trừ khi bạn chỉ định một trục. Để xem điều gì đang xảy ra, bạn có thể sử dụng flattenmột cách rõ ràng:

np.argmax[a]
>>> 5

a.flatten[]
>>>> array[[ 1,  2,  4,  7,  9, 88,  6, 45,  9, 76,  3,  4]]
             0   1   2   3   4   5 

Tôi đã đánh số các chỉ số dưới mảng ở trên để làm cho nó rõ ràng hơn. Lưu ý rằng các chỉ số được đánh số từ 0 đến numpy.

Trong trường hợp bạn chỉ định trục, nó cũng hoạt động như mong đợi:

np.argmax[a,axis=0]
>>> array[[1, 1, 1, 1]]

Điều này cho bạn biết rằng giá trị lớn nhất nằm trong hàng 1[giá trị thứ 2], cho mỗi cột dọc theo axis=0[xuống]. Bạn có thể thấy điều này rõ ràng hơn nếu bạn thay đổi dữ liệu của mình một chút:

a=np.array[[[100,2,4,7],[9,88,6,45],[9,76,3,100]]]
a
>>> array[[[100,   2,   4,   7],
           [  9,  88,   6,  45],
           [  9,  76,   3, 100]]]

np.argmax[a, axis=0]
>>> array[[0, 1, 1, 2]]

Như bạn có thể thấy, bây giờ nó xác định giá trị lớn nhất trong hàng 0 cho cột 1, hàng 1 cho cột 2 và 3 và hàng 3 cho cột 4.

Có một hướng dẫn hữu ích để numpylập chỉ mục trong tài liệu .

5 hữu ích 0 bình luận chia sẻ

Tôi không thể hiểu đầu ra của argmaxargmin khi sử dụng với tham số trục. Ví dụ:

>>> a = np.array[[[1,2,4,7], [9,88,6,45], [9,76,3,4]]]
>>> a
array[[[ 1,  2,  4,  7],
       [ 9, 88,  6, 45],
       [ 9, 76,  3,  4]]]
>>> a.shape
[3, 4]
>>> a.size
12
>>> np.argmax[a]
5
>>> np.argmax[a,axis=0]
array[[1, 1, 1, 1]]
>>> np.argmax[a,axis=1]
array[[3, 1, 1]]
>>> np.argmin[a]
0
>>> np.argmin[a,axis=0]
array[[0, 0, 2, 2]]
>>> np.argmin[a,axis=1]
array[[0, 2, 2]]

Như bạn có thể thấy, giá trị tối đa là điểm [1,1] và giá trị tối thiểu là điểm [0,0]. Vì vậy, theo logic của tôi khi tôi chạy:

  • np.argmin[a,axis=0] Tôi mong đợi array[[0,0,0,0]] 
  • np.argmin[a,axis=1] Tôi mong đợi array[[0,0,0]] 
  • np.argmax[a,axis=0] Tôi mong đợi array[[1,1,1,1]] 
  • np.argmax[a,axis=1] Tôi mong đợi array[[1,1,1]] 

Điều gì là sai với sự hiểu biết của tôi về mọi thứ?

Bằng cách thêm đối số axis, NumPy xem xét các hàng và cột riêng lẻ. Khi không được cung cấp, mảng a được làm phẳng thành một mảng 1D.

axis=0 có nghĩa là thao tác được thực hiện xuống các cột của mảng 2D a lần lượt.

Ví dụ: np.argmin[a, axis=0] trả về chỉ mục của giá trị tối thiểu trong mỗi bốn cột. Giá trị tối thiểu trong mỗi cột được hiển thị trong đậm bên dưới:

>>> a
array[[[ 1,  2,  4,  7],  # 0
       [ 9, 88,  6, 45],  # 1
       [ 9, 76,  3,  4]]] # 2

>>> np.argmin[a, axis=0]
array[[0, 0, 2, 2]]

Mặt khác, axis=1 có nghĩa là thao tác được thực hiện ngang các hàng của a

Điều đó có nghĩa là np.argmin[a, axis=1] trả về [0, 2, 2]a có ba hàng. Chỉ số của giá trị tối thiểu ở hàng đầu tiên là 0, chỉ số của giá trị tối thiểu của hàng thứ hai và thứ ba là 2:

>>> a
#        0   1   2   3
array[[[ 1,  2,  4,  7],
       [ 9, 88,  6, 45],
       [ 9, 76,  3,  4]]]

>>> np.argmin[a, axis=1]
array[[0, 2, 2]]

Hàm np.argmax theo mặc định hoạt động dọc theo mảng dẹt , trừ khi bạn chỉ định một trục. Để xem những gì đang xảy ra, bạn có thể sử dụng flatten một cách rõ ràng:

np.argmax[a]
>>> 5

a.flatten[]
>>>> array[[ 1,  2,  4,  7,  9, 88,  6, 45,  9, 76,  3,  4]]
             0   1   2   3   4   5 

Tôi đã đánh số các chỉ số dưới mảng trên để làm cho nó rõ ràng hơn. Lưu ý rằng các chỉ số được đánh số từ 0 trong numpy

Trong trường hợp bạn chỉ định trục, nó cũng hoạt động như mong đợi:

np.argmax[a,axis=0]
>>> array[[1, 1, 1, 1]]

Điều này cho bạn biết rằng giá trị lớn nhất nằm ở hàng 1 [giá trị thứ 2], cho mỗi cột dọc theo axis=0 [xuống]. Bạn có thể thấy rõ hơn điều này nếu bạn thay đổi dữ liệu của mình một chút:

a=np.array[[[100,2,4,7],[9,88,6,45],[9,76,3,100]]]
a
>>> array[[[100,   2,   4,   7],
           [  9,  88,   6,  45],
           [  9,  76,   3, 100]]]

np.argmax[a, axis=0]
>>> array[[0, 1, 1, 2]]

Như bạn có thể thấy bây giờ xác định giá trị tối đa trong hàng 0 cho cột 1, hàng 1 cho cột 2 và 3 và hàng 3 cho cột 4.

Có một hướng dẫn hữu ích để lập chỉ mục numpy trong tài liệu .

Như một lưu ý phụ: nếu bạn muốn tìm tọa độ giá trị tối đa của mình trong mảng đầy đủ, bạn có thể sử dụng

a=np.array[[[1,2,4,7],[9,88,6,45],[9,76,3,4]]]
>>> a
[[ 1  2  4  7]
 [ 9 88  6 45]
 [ 9 76  3  4]]

c=[np.argmax[a]/len[a[0]],np.argmax[a]%len[a[0]]]
>>> c
[1, 1]

""" ....READ THE COMMENTS FOR CLARIFICATION....."""

import numpy as np
a = np.array[[[1,2,4,7], [9,88,6,45], [9,76,3,4]]]

"""np.argmax[a] will give index of max value in flatted array of given matrix """
>>np.arg[max]
5

"""np.argmax[a,axis=0] will return list of indexes of  max value column-wise"""
>>print[np.argmax[a,axis=0]]
[1,1,1,1]

"""np.argmax[a,axis=1] will return list of indexes of  max value row-wise"""
>>print[np.argmax[a,axis=1]]
[3,1,1]

"""np.argmin[a] will give index of min value in flatted array of given matrix """
>>np.arg[min]
0

"""np.argmin[a,axis=0] will return list of indexes of  min value column-wise"""
>>print[np.argmin[a,axis=0]]
[0,0,2,2]

"""np.argmin[a,axis=0] will return list of indexes of  min value row-wise"""
>>print[np.argmin[a,axis=1]]
[0,2,2]

Trục trong đối số hàm argmax, đề cập đến trục dọc theo đó mảng sẽ được cắt. 

Trong một từ khác, np.argmin[a,axis=0] thực sự giống với np.apply_along_axis[np.argmin, 0, a], nghĩa là tìm ra vị trí tối thiểu cho các vectơ được cắt dọc theo trục = 0.

Do đó, trong ví dụ của bạn, np.argmin[a, axis=0][0, 0, 2, 2] tương ứng với các giá trị của [1, 2, 3, 4] trên các cột tương ứng

Chủ Đề