Theo np.argmax
mặ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 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 đế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 để numpy
lậ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 argmax
và argmin
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 đợiarray[[0,0,0,0]]
np.argmin[a,axis=1]
Tôi mong đợiarray[[0,0,0]]
np.argmax[a,axis=0]
Tôi mong đợiarray[[1,1,1,1]]
np.argmax[a,axis=1]
Tôi mong đợiarray[[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]
vì 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]
là [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