NumPy percentile() 函数
NumPy percentile() 函数计算输入数组沿指定轴的第 n 个百分位数。百分位数是指给定百分比的观测值低于该值。它在统计学中常用于理解数据的分布。
percentile() 函数的运算方式与中位数类似,但它可以计算数据中的第 n 个百分位数值,同时考虑数据点的分布和重复性。与始终返回中间值的中位数不同,百分位数函数可以提供任何指定的百分位数,即使数据集中存在重复值。
percentile() 函数在所需百分位数位于数组中两个数据点之间时执行插值。默认情况下,它使用线性插值来估算结果。
语法
以下是 NumPy percentile() 函数的语法 -
numpy.percentile(a, q, axis=None, out=None, overwrite_input=False, method='linear', keepdims=False, weights=None, interpolation=None)
参数
以下是 NumPy percentile() 函数的参数 -
- a:输入数组。它可以是 NumPy 数组、列表或标量值。
- q:要计算的百分位数值或百分位数组。它应该介于 0 到 100 之间。
- axis(可选):计算百分位的轴。如果为 None,则百分位将在整个展平数组上计算。
- out(可选):用于存储结果的备用输出数组。它必须与预期输出具有相同的形状。
- overwrite_input(可选):如果为 True,则输入数组将被就地修改。默认值为 False。
- weights:如果 weights=None,则假定 a 中的所有数据的权重都等于 1。仅 method=inverted_cdf 支持权重。
- keepdims(可选):如果为 True,则缩小后的维度在输出中保留为 1 的维度。默认值为 False。
- interpolation(可选):method 关键字参数的弃用名称。
- method(可选):指定插值方法。选项包括:
- linear(默认):两个数据点之间的线性插值。
- lower:当百分位数位于两个值之间时,使用较低的值。
- higher:当百分位数位于两个值之间时,使用较高的值。
- midpoint:当百分位数位于两个值之间时,使用两个值的中点。
- nearest:使用最近的值。
返回值
此函数根据输入,将计算出的百分位数以标量或 NumPy 数组的形式返回。结果基于指定的插值方法和轴。
示例
以下是使用 NumPy percentile() 函数计算数组第 50 个百分位数(中位数)的基本示例 -
import numpy as np # 输入数组 data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) # 计算第 50 个百分位数(中位数) percentile_50 = np.percentile(data, 50) print("第 50 个百分位数:", percentile_50)
输出
以下是上述代码的输出−
第 50 个百分位数:5.5
示例:沿轴计算百分位数
percentile() 函数可以计算多维数组中沿指定轴的百分位数。在以下示例中,我们计算二维数组沿行(axis=1)的第 90 个百分位数 -
import numpy as np # 二维数组 data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 沿行(axis=1)的第 90 个百分位数 percentile_90_rows = np.percentile(data, 90, axis=1) print("沿行的第 90 个百分位数:", percentile_90_rows)
输出
以下是上述代码的输出 -
沿行的第 90 个百分位数:[ 2.8 5.8 8.8]
示例:'method' 参数的用法
在以下示例中,我们使用 'midpoint' 插值方法计算了数组的第 25 个百分位数 -
import numpy as np # 输入数组 data = np.array([1, 3, 5, 7]) # 使用"中点法"计算 25% 百分位数 percentile_25_midpoint = np.percentile(data, 25, method='midpoint') print("25% 百分位数(中点法):", percentile_25_midpoint)
输出
以下是上述代码的输出 -
25% 百分位数(中点法):2.0
示例:使用"percentile()"的多维数组
percentile() 函数也适用于多维数组。在以下示例中,我们计算了二维数组沿列(axis=0)的第 75 个百分位数 -
import numpy as np # 二维数组 data = np.array([[1, 3, 5], [2, 4, 6], [3, 5, 7]]) # 沿列(axis=0)的第 75 个百分位数 percentile_75_columns = np.percentile(data, 75, axis=0) print("沿列的第 75 个百分位数:", percentile_75_columns)
输出
以下是上述代码的输出 -
沿列的第 75 个百分位数:[2.5 4.5 6.5]
示例:'percentile()' 的图形表示
在以下示例中,我们绘制了应用于给定数据集的不同插值方法的百分位数。数据集包含值 [0, 1, 2, 3],我们计算了 0 到 100 范围内的百分位数。
我们使用 NumPy 计算了每种指定方法的百分位数,并使用 matplotlib 对结果进行可视化。该图演示了不同的插值方法如何影响百分位数估计值,每种方法都用不同的线型和颜色表示 -
import numpy as np import matplotlib.pyplot as plt # 定义输入数据和百分位数 a = np.arange(4) # 数据:[0, 1, 2, 3] p = np.linspace(0, 100, 6001) # 百分位数:0 到 100,步长为 0.01% # 创建用于绘图的图形和坐标轴 fig, ax = plt.subplots(figsize=(10, 6)) # 定义插值方法及其样式 lines = [ ('linear', '-', 'C0'), ('inverted_cdf', ':', 'C1'), ('averaged_inverted_cdf', '-.', 'C1'), ('closest_observation', ':', 'C2'), ('interpolated_inverted_cdf', '--', 'C1'), ('hazen', '--', 'C3'), ('weibull', '-.', 'C4'), ('median_unbiased', '--', 'C5'), ('normal_unbiased', '-.', 'C6'), ] # 绘制每种方法的百分位数 for method, style, color in lines: ax.plot( p, np.percentile(a, p, method=method), label=method, linestyle=style, color=color ) # 配置图 ax.set( title=f'不同方法和数据的百分位数:{a}', xlabel='百分位数', ylabel='估计的百分位数值', yticks=a ) ax.legend(bbox_to_anchor=(1.03, 1), loc='左上') plt.tight_layout() # 调整布局以适应图例 plt.show()
输出
该图显示了值范围内恒定的第50个百分位线 -

numpy_statistical_functions.html