NumPy ptp() 函数
NumPy ptp() 函数计算数组的范围(峰峰值),其定义为最大值与最小值之间的差值。此函数对于理解数组中数据的分布情况特别有用。
如果数组中或指定轴上的所有值均为 NaN,则会引发 RuntimeWarning,结果将为 NaN。同样,如果数组包含正无穷大或负无穷大(inf 或 -inf),该函数仍会在计算范围时将无穷大作为范围计算的一部分。
即使所有值都是整数,当输入数组中的任何元素都是浮点数时,ptp() 函数也会返回浮点数据类型。这确保了与可能包含 NaN、无穷大或小数的数组的兼容性。如果输入数组仅包含整数且不包含 NaN 值,则返回类型与输入的数据类型匹配。
以下是 NumPy ptp() 函数的语法 -
numpy.ptp(a, axis=None, out=None, keepdims=False)
参数
以下是 NumPy ptp() 函数的参数 -
- a:输入数组。数组可以是任意形状或数据类型,并且可以包含 NaN 值。
- axis(可选):计算范围的轴。如果为 None,则范围将在展平后的数组上计算。
- out(可选):用于放置结果的备用输出数组。其形状必须与预期输出相同。
- keepdims(可选):如果为 True,则缩小的维度在输出中保留为 1 的尺寸。默认值为 False。
返回值
此函数返回一个标量值或一个 NumPy 数组,其中包含沿指定轴的范围(峰峰值)。
示例
以下是使用 NumPy ptp() 函数查找数组中范围(峰峰值)值的基本示例 -
import numpy as np
# 输入包含 NaN 值的数组
array = np.array([3, 1, 7, 9, 24, 79])
# 查找峰峰值,忽略 NaN
range_value = np.ptp(array)
print("峰峰值:", range_value)
输出
以下是上述代码的输出 -
峰峰值:78
示例:沿轴的范围
ptp() 函数可以查找多维数组中指定轴上的范围值。在以下示例中,我们计算了沿行和列的范围值 -
import numpy as np
# 包含 NaN 值的二维输入数组
array = np.array([[3, 7, 19], [8, 4, 2], [6, 45, 9]])
# 沿行的范围 (axis=1)
range_along_rows = np.ptp(array, axis=1)
print("沿行的范围:", range_along_rows)
# 沿列的范围 (axis=0)
range_along_columns = np.ptp(array, axis=0)
print("沿列的范围:", range_along_columns)
输出
以下是上述代码的输出 -
沿行的范围:[16 6 39] 沿列的范围:[ 5 41 17]
示例:带有"keepdims"参数的范围
keepdims 参数将缩减后的维度在输出中保留为一个维度。这意味着,当我们传递一个多维数组并将此参数设置为 True 时,缩减后的维度的大小将保持为 1,从而保留数组的原始维度。在以下示例中,我们演示了它的用法 -
import numpy as np
# 二维输入数组
array = np.array([[3, 7, 5], [8, 4, 16], [6, 1, 9]])
# 沿列进行范围设置,keepdims=True
range_with_keepdims = np.ptp(array, axis=0, keepdims=True)
print("Range with keepdims:
", range_with_keepdims)
输出
以下是上述代码的输出 -
Range with keepdims: [[ 5 6 11]]
示例:'ptp()' 的图形表示
在下面的示例中,我们可视化了二维数组中行和列的 NaN 值的范围值。为此,我们需要导入 numpy 和 matplotlib.pyplot 模块 -
import numpy as np
import matplotlib.pyplot as plt
# 二维输入数组
array = np.array([[3, 7, 5], [8, 4, 2], [6, 1, 9]])
# 沿行范围
range_rows = np.ptp(array, axis=1)
# 沿列范围
range_columns = np.ptp(array, axis=0)
plt.plot(range(len(range_rows)), range_rows, label="沿行范围(忽略 NaN)")
plt.plot(range(len(range_columns)), range_columns, label="沿列的范围(忽略 NaN)"
plt.title("ptp() 结果可视化")
plt.xlabel("索引")
plt.ylabel("范围值")
plt.legend()
plt.grid()
plt.show()
输出
该图可视化了数组沿行和列的范围值 -
numpy_statistical_functions.html

