在 NumPy 中,求最值主要包括 4 个方面:最大值、最小值、最大值所在索引、最小值所在索引。
| 函数 | 说明 |
|---|---|
| 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(行方向)轴最小值所在的索引。
