NumPy nanmax() 函数
NumPy nanmax() 函数计算数组的最大值,忽略任何 NaN(非数字)值。如果数组中或指定轴上的所有值均为 NaN,则会引发 RuntimeWarning,结果将为 NaN。
当数组中存在正无穷大 (inf) 和负无穷大 (-inf) 时,nanmax() 的行为类似,会忽略 NaN 值。但是,只要数组中不存在会掩盖计算结果的 NaN 元素,它仍会将 inf 视为最大可能值(如果存在)。
当输入数组中的任何元素为浮点数时,即使所有值都是整数,nanmax() 函数也会返回浮点数据类型。这确保了与可能包含 NaN、无穷大或小数的数组的兼容性。如果输入数组仅包含整数且不包含 NaN 值,则返回类型与输入的数据类型匹配。
以下是 NumPy nanmax() 函数的语法 -
numpy.nanmax(a, axis=None, out=None, keepdims=False, initial=None, where=True)
参数
以下是 NumPy nanmax() 函数的参数 -
- a:输入数组。该数组可以是任意形状或数据类型,并且可以包含 NaN 值。
- axis(可选):计算最大值的轴。如果为 None,则在展平数组上计算最大值。
- out(可选):用于放置结果的备用输出数组。其形状必须与预期输出相同。
- keepdims(可选):如果为 True,则缩小的维度在输出中保留为大小为 1 的维度。默认值为 False。
- initial(可选):启动比较的初始值。如果未提供,则默认值为该数据类型的最小可能值。
- where(可选):布尔数组。如果为 True,则在计算中包含相应的元素;否则,忽略它。
返回值
此函数返回一个标量值或一个 NumPy 数组,其中包含指定轴上的最大值,忽略 NaN 值。
示例
以下是使用 NumPy nanmax() 函数查找数组中最大值的基本示例,同时忽略 NaN 值 -
import numpy as np # 输入包含 NaN 值的数组 array = np.array([3, np.nan, 1, 7, 9]) # 查找最大值,忽略 NaN max_value = np.nanmax(array) print("最大值(忽略 NaN):", max_value)
输出
以下是上述代码的输出 -
最大值(忽略 NaN):9.0
示例:沿轴求最大值
nanmax() 函数可以查找多维数组中指定轴上的最大值,同时忽略 NaN 值。在以下示例中,我们计算了沿行和列的最大值 -
import numpy as np # 包含 NaN 值的二维输入数组 array = np.array([[3, 7, np.nan], [8, np.nan, 2], [6, 1, 9]]) # 沿行的最大值 (axis=1) max_along_rows = np.nanmax(array, axis=1) print("行数最大值:", max_along_rows) # 沿列的最大值 (axis=0) max_along_columns = np.nanmax(array, axis=0) print("列数最大值:", max_along_columns)
输出
以下是上述代码的输出 -
行数最大值:[7. 8. 9.] 列数最大值:[8. 7. 9.]
示例:使用"keepdims"获取最大值
keepdims 参数将缩减后的维度在输出中保留为一个维度。这意味着,当我们传递一个多维数组并将此参数设置为 True 时,缩减后的维度大小将保持为 1,从而保留数组的原始维度。在以下示例中,我们演示了它的用法 -
import numpy as np # 包含 NaN 值的二维输入数组 array = np.array([[3, np.nan, 5], [8, 4, np.nan], [6, 1, 9]]) # 沿 keepdims=True 的列求最大值 max_with_keepdims = np.nanmax(array, axis=0, keepdims=True) print("使用 keepdims 的最大值: ", max_with_keepdims)
输出
以下是上述代码的输出 -
使用 keepdims 的最大值: [[8. 4. 9.]]
示例:使用"where"条件计算最大值
where 参数允许根据条件计算最大值。在以下示例中,我们计算了大于 5 的最大元素,同时忽略了 NaN 值 -
import numpy as np # 输入包含 NaN 值的数组 array = np.array([3, 5, np.nan, 7, 9]) max_without_condition = np.nanmax(array) print("无条件最大值(忽略 NaN):", max_without_condition) # where 条件(仅包含大于 5 的值) max_with_condition = np.nanmax(array, where=array > 5, initial=0) print("有条件最大值:", max_with_condition)
输出
以下是上述代码的输出 -
无条件最大值(忽略 NaN):9.0 有条件最大值:9.0
示例:'nanmax()' 的图形表示
在下面的示例中,我们可视化了包含 NaN 值的二维数组的行和列的最大值。为此,我们需要导入 numpy 和 matplotlib.pyplot 模块 -
import numpy as np import matplotlib.pyplot as plt # 包含 NaN 值的二维输入数组 array = np.array([[3, np.nan, 5], [8, 4, np.nan], [6, 1, 9]]) # 沿行最大值 max_rows = np.nanmax(array, axis=1) # 沿列最大值 max_columns = np.nanmax(array, axis=0) plt.plot(range(len(max_rows)), max_rows, label="沿行最大值(忽略 NaN)") plt.plot(range(len(max_columns)), max_columns, label="沿列的最大值(忽略 NaN)" plt.title("nanmax() 结果可视化") plt.xlabel("索引") plt.ylabel("最大值") plt.legend() plt.grid() plt.show()
输出
该图可视化了数组中行和列的最大值,忽略了 NaN 值 -

numpy_statistical_functions.html