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