NumPy nanpercentile() 函数
NumPy nanpercentile() 函数计算输入数组沿指定轴的第 n 个百分位,同时忽略 NaN(非数字)值。如果输入包含小于 float64 的整数或浮点数,则输出数据类型为 float64。否则,输出数据类型与输入相同。如果指定了 out 参数,则返回该数组。此函数在处理包含缺失数据或无效数据的数据集时特别有用。
在 Numpy 中,percentail() 和 nanpercentile() 函数允许计算第 n 个百分位数值。唯一的区别是 nanpercentile() 函数在计算中排除了 NaN 值。
当所需百分位数位于数组中的两个数据点之间时,nanpercentile() 函数会执行插值。默认情况下,它使用线性插值来估算结果。
语法
以下是 NumPy nanpercentile() 函数的语法 -
numpy.nanpercentile(a, q, axis=None, out=None, overwrite_input=False, method='linear', keepdims=<no value>, weights=None, interpolation=None)
参数
以下是 NumPy nanpercentile() 函数的参数 -
- a:输入数组或可转换为数组的对象。它可以是 NumPy 数组、列表或标量值。 NaN 值将被忽略。
- q:要计算的百分位数值或百分位数组。它应该介于 0 到 100 之间。
- axis(可选):计算百分位的轴。如果为 None,则百分位将在整个展平数组上计算。
- out(可选):用于存储结果的备用输出数组。它必须与预期输出具有相同的形状。
- overwrite_input(可选):如果为 True,则输入数组将被就地修改。默认值为 False。
- keepdims(可选):如果为 True,则缩小的维度在输出中保留为 1 的尺寸。默认值为 False。
- weights:如果 weights=None,则 a 中的所有数据均被假定为权重等于 1。只有 method=inverted_cdf 支持权重。
- interpolation(可选):method 关键字参数的弃用名称。
- method(可选):指定插值方法。选项包括:
- linear(默认):两个数据点之间的线性插值。
- lower:当百分位数位于两个值之间时,使用较低的值。
- higher:当百分位数位于两个值之间时,使用较高的值。
- midpoint:当百分位数位于两个值之间时,使用两个值的中点。
- nearest:使用最近的值。
返回值
此函数根据输入,以标量或 NumPy 数组的形式返回计算出的百分位数。结果基于指定的插值方法和轴,不包括任何 NaN 值。如果给出了多个百分位数,则结果的第一个轴对应于百分位数。其它轴是a减少后剩下的轴。
示例
以下是一个使用 NumPy nanpercentile() 函数计算数组第 25 个百分位数(中位数)的基本示例,忽略 NaN 值 -
import numpy as np # 输入包含 NaN 值的数组 data = np.array([1, 2, np.nan, 4, 5, np.nan, 7, 8, 9, 10]) # 计算第 50 个百分位数(中位数),忽略 NaN percentile_25 = np.nanpercentile(data, 25) print("第 25 个百分位数(忽略 NaN):", percentile_25)
输出
以下是上述代码的输出 -
25% 百分位数(忽略 NaN):3.5
示例:沿轴的百分位数
nanpercentile() 函数可以计算多维数组中沿指定轴的百分位数。在以下示例中,我们计算了二维数组沿行(axis=1)的第 90 个百分位数,忽略 NaN 值 -
import numpy as np # 包含 NaN 值的二维数组 data = np.array([[1, 2, np.nan], [4, np.nan, 6], [7, 8, 9]]) # 沿行(axis=1)的第 90 个百分位数,忽略 NaN percentile_90_rows = np.nanpercentile(data, 90, axis=1) print("沿行的第 90 个百分位数(忽略 NaN):", percentile_90_rows)
输出
以下是输出以上代码 −
沿行第 90 个百分位数(忽略 NaN):[1.9 5.8 8.8]
示例:'method' 参数的用法
在以下示例中,我们使用 'midpoint' 插值方法计算了数组的第 25 个百分位数,忽略了 NaN 值 -
import numpy as np # 输入包含 NaN 值的数组 data = np.array([1, np.nan, 5, 7]) # 使用 'midpoint' 方法计算第 25 个百分位数,忽略 NaN percentile_25_midpoint = np.nanpercentile(data, 25, method='midpoint') print("第 25 个百分位数(中点法,忽略 NaN):", percentile_25_midpoint)
输出
以下是上述代码的输出 -
25 百分位数(中点法,忽略 NaN):3.0
示例:多维数组
nanpercentile() 函数也适用于多维数组。在以下示例中,我们计算了二维数组沿列(axis=0)的第 75 个百分位数,忽略 NaN 值 -
import numpy as np # 包含 NaN 值的二维数组 data = np.array([[1, np.nan, 5], [2, 4, np.nan], [3, 5, 7]]) # 沿列(axis=0)的第 75 个百分位数,忽略 NaN percentile_75_columns = np.nanpercentile(data, 75, axis=0) print("沿列的第 75 个百分位数(忽略 NaN):", percentile_75_columns)
输出
以下是上述代码的输出 −
沿列的第 75 个百分位数(忽略 NaN):[2.5 4.5 6.5]
示例:图形表示
在下面的示例中,我们可视化了数组的第 50 个百分位数,同时忽略了 NaN 值。使用 NumPy 生成数据,使用 matplotlib 绘制结果 -
import numpy as np import matplotlib.pyplot as plt # 输入包含 NaN 值的数据 x = np.linspace(0, 10, 100) x[::10] = np.nan # 引入 NaN 值 y = np.nanpercentile(x, 50) # 绘制结果 plt.plot(x, np.full_like(x, y), label="第 50 百分位数(中位数,忽略 NaN)") plt.title("Nanpercentile 函数可视化") plt.xlabel("输入") plt.ylabel("百分位数值") plt.legend() plt.grid() plt.show()
输出
该图显示了除 NaN 值之外,所有值范围内的 50% 百分位线的常数 -

numpy_statistical_functions.html