NumPy 求最值

在 NumPy 中,求最值主要包括 4 个方面:最大值、最小值、最大值所在索引、最小值所在索引。

NumPy 求最值的函数
函数 说明
amax() 求最大值
amin() 求最小值
argmax 求最大值所在索引
argmin 求最小值所在索引

NumPy 求最大值

在 NumPy 中,我们可以使用 amax() 函数来求数组中的最大值。

语法:

np.amax(arr, axis=None, keepdims=False)

说明:

amax() 函数可以接收 3 个参数。

  • arr(必选):是一个数组。
  • axis(可选,默认值:None):表示沿着指定轴来查找最大值。
    • None:计算整个数组的最大值(默认行为)。
    • axis=0:对每一列求最大值(沿行方向比较)。
    • axis=1:对每一行求最大值(沿列方向比较)。
  • keepdims(可选,默认值:False):是否在结果中保留原始数组的维度。
    • False:返回的结果会 “压缩” 掉被计算的轴。
    • True:保留原数组的维度(方便做广播运算)。

提示: 在实际开发中,小伙伴们可能会经常看到 np.max() 和 np.min()。其实,它们只是 np.amax() 和 np.amin() 的别名,两者的功能和用法是完全一样的。

示例 1:默认求全局最大值

import numpy as np

arr = np.array([[1, 5, 2], [8, 4, 9]])
result = np.amax(arr)

print(arr)
print(result)

运行结果如下。

[[1 5 2]
 [8 4 9]]
9

分析:

np.amax(arr) 表示求整个数组 arr 中的最大值,也就是 9。

示例 2:沿列求最大值(axis=0)

import numpy as np

arr = np.array([[1, 5, 2], [8, 4, 9]])
result = np.amax(arr, axis=0)

print(arr)
print(result)

运行结果如下。

[[1 5 2]
 [8 4 9]]
[8 5 9]

分析:

np.amax(arr, axis=0) 表示求数组 arr 中沿着 axis=0 (列方向)轴的最大值。

示例 3:沿行求最大值(axis=1)

import numpy as np

arr = np.array([[1, 5, 2], [8, 4, 9]])
result = np.amax(arr, axis=1)

print(arr)
print(result)

运行结果如下。

[[1 5 2]
 [8 4 9]]
[5 9]

分析:

np.amax(arr, axis=1) 表示求数组 arr 中沿着 axis=1 (行方向)轴的最大值。

示例 4:保持维度(keepdims=True)

import numpy as np

arr = np.array([[1, 5, 2], [8, 4, 9]])
result = np.amax(arr, axis=1, keepdims=True)

print(arr)
print(result)

运行结果如下。

[[1 5 2]
 [8 4 9]]

[[5]
 [9]]

分析:

keepdims=True 表示保留行维度,便于后续广播运算。如果小伙伴们不了解广播运算,另请参阅:NumPy 广播机制

NumPy 求最小值

在 NumPy 中,我们可以使用 amin() 函数来求数组中的最小值。

语法:

np.amin(arr, axis=None, keepdims=False)

说明:

amin() 函数可以接收 3 个参数。

  • arr(必选):是一个数组。
  • axis(可选:默认值:None):表示沿着指定的轴查找最小值。
    • 当取值为 None 时,表示求整个数组的最小值。
    • 对于二维数组来说:当 axis=0,表示求每一列的最小值(沿行方向),最终返回一个包含每列最小值的一维数组;当 axis=1 时,表示求每一行中的最小值(沿列方向),最终返回一个包含每行最小值的一维数组。
  • keepdims(可选,默认值:False):是否保留原始数组的维度。如果为 True,则结果在被压缩的轴上维度大小为 1,这在广播运算中很有用。

示例 5:默认求全局最小值

import numpy as np

arr = np.array([[1, 5, 2], [8, 4, 9]])
result = np.amin(arr)

print(arr)
print(result)

运行结果如下。

[[1 5 2]
 [8 4 9]]

1

分析:

np.amin(arr) 表示求数组 arr 中的最小值,也就是 1。

示例 6:沿列求最小值(axis=0)

import numpy as np

arr = np.array([[1, 5, 2], [8, 4, 9]])
result = np.amin(arr, axis=0)

print(arr)
print(result)

运行结果如下。

[[1 5 2]
 [8 4 9]]
[1 4 2]

分析:

np.amin(arr, axis=0) 表示求数组 arr 中沿着 axis=0 (列方向)轴的最小值。

示例 7:沿行求最小值(axis=1)

import numpy as np

arr = np.array([[1, 5, 2], [8, 4, 9]])
result = np.amin(arr, axis=1)

print(arr)
print(result)

运行结果如下。

[[1 5 2]
 [8 4 9]]
[1 4]

分析:

np.amin(arr, axis=1) 表示求数组 arr 中沿着 axis=1 (行方向)轴的最小值。

NumPy 求最大值索引

在 NumPy 中,我们可以使用 argmax() 函数来求数组中最大值所在的索引。

语法:

np.argmax(arr, axis=None)

说明:

argmax() 函数接收以下 2 个参数。

  • arr(必选):是一个数组。
  • axis(可选:默认值:None):表示沿着指定的轴查找最大值的索引。
    • None:会先把数组 “展平”(变成一维),然后再返回最大值的索引(对应一维数组的下标)。
    • axis=0:按列找最大值的索引(沿着行方向),返回一个包含每列最大值索引的一维数组。
    • axis=1:按行找最大值的索引(沿着列方向),返回一个包含每行最大值索引的一维数组。

示例 8:默认求全局最大值索引

import numpy as np

arr = np.array([[1, 5, 2], [8, 4, 9]])

print(arr)
print(np.argmax(arr))

运行结果如下。

[[1 5 2]
 [8 4 9]]
5

分析:

np.argmax(arr) 表示求数组 arr 中最大值所在的索引。对于这个二维数组来说,它的最大值是 9,而 9 所在的索引是 5。

示例 9:沿列求最大值索引(axis=0)

import numpy as np

arr = np.array([[1, 5, 2], [8, 4, 9]])

print(arr)
print(np.argmax(arr, axis=0))

运行结果如下。

[[1 5 2]
 [8 4 9]]
[1 0 1]

分析:

np.argmax(arr, axis=0) 表示求数组 arr 中沿着 axis=0 (列方向)轴最大值所在的索引。

示例 10:沿行求最大值索引(axis=1)

import numpy as np

arr = np.array([[1, 5, 2], [8, 4, 9]])

print(arr)
print(np.argmax(arr, axis=1))

运行结果如下。

[[1 5 2]
 [8 4 9]]
[1 2]

分析:

np.argmax(arr, axis=1) 表示求数组 arr 中沿着 axis=1 (行方向)轴最大值所在的索引。

NumPy 求最小值索引

在 NumPy 中,我们可以使用 argmin() 函数来求数组中最小值所在的索引。

语法:

np.argmin(arr, axis=None)

说明:

argmin() 函数接收以下 2 个参数。

  • arr(必选):是一个数组。
  • axis(可选:默认值:None):表示沿着指定的轴查找最小值的索引。
    • None:会先将数组展平(flatten),再返回最小值的索引(是一维索引)。
    • axis=0:沿列方向查找(每一列的最小值索引,结果是一维数组)。
    • axis=1:沿行方向查找(每一行的最小值索引,结果是一维数组)。

示例 11:默认求全局最小值索引

import numpy as np

arr = np.array([[1, 5, 2], [8, 4, 9]])

print(arr)
print(np.argmin(arr))

运行结果如下。

[[1 5 2]
 [8 4 9]]
0

分析:

np.argmin(arr) 表示求数组 arr 中最小值所在的索引。对于这个二维数组来说,它的最小值是 1,而 1 所在的索引是 0。

示例 12:沿列求最小值索引(axis=0)

import numpy as np

arr = np.array([[1, 5, 2], [8, 4, 9]])

print(arr)
print(np.argmin(arr, axis=0))

运行结果如下。

[[1 5 2]
 [8 4 9]]
[0 1 0]

分析:

np.argmin(arr, axis = 0) 表示求数组 arr 中沿着 axis=0(列方向)轴最小值所在的索引。

示例 13:沿行求最小值索引(axis=1)

import numpy as np

arr = np.array([[1, 5, 2], [8, 4, 9]])

print(arr)
print(np.argmin(arr, axis=1))

运行结果如下。

[[1 5 2]
[8 4 9]]
[0 1]

分析:

np.argmin(arr, axis=1) 表示求数组 arr 中沿着 axis=1(行方向)轴最小值所在的索引。

上一篇: NumPy 求和

下一篇: NumPy 求中位数

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号