NumPy percentile() 函数返回数组元素的第 q 个百分位数或沿指定轴的数据的第 q 个百分位数。
语法
numpy.percentile(a, q, axis=None, out=None,
interpolation='linear', keepdims=False)
参数
a | 必需。 指定输入数组。 |
q | 必填。 指定要计算的百分位数或百分位数序列,必须介于 0 到 100 之间(包含 0 和 100)(类似于浮点数组)。 |
axis | 可选。 指定要操作的一个或多个轴。默认情况下,axis=None,对展平数组执行操作。 |
out | 可选。 指定放置结果的输出数组。它必须具有与预期输出相同的形状。 |
interpolation | 可选。 指定当所需百分位位于两个数据点之间时要使用的插值方法。它可以从 {'linear', 'lower', 'higher', 'midpoint', 'nearest'} |
keepdims | 可选。 如果将此设置为 True,则缩小的轴将作为大小为 1 的维度保留在结果中。使用此选项,结果将针对输入数组正确广播。 |
返回值
返回a的百分位数。如果 q 是单个百分位数且 axis=None,则结果是标量。在其他情况下,结果是一个数组。
示例:展平数组的percentile()
在下面的示例中,使用了percentile()函数返回数组中存在的所有值的最大值。
import numpy as np
Arr = np.array([[10,20, 30],[40, 50, 60]])
print("Array is:")
print(Arr)
print()
#计算第50个百分位点
print("50th percentile:", np.percentile(Arr, 50))
print()
#计算 (25, 50, 75) 百分位数
print("[25, 50, 75] percentile:\n",
np.percentile(Arr, (25, 50, 75)))
上述代码的输出将是:
Array is:
[[10 20 30]
[40 50 60]]
50th percentile: 35.0
[25, 50, 75] percentile:
[22.5 35. 47.5]
示例:使用轴参数
当提供axis参数时,将计算指定轴上的百分位数。考虑以下示例。
import numpy as np
Arr = np.array([[10,20, 30],[40, 50, 60]])
print("Array is:")
print(Arr)
print()
#计算沿轴的第50个百分位点=0
print("50th percentile (axis=0):",
np.percentile(Arr, 50, axis=0))
#计算沿轴的第50个百分位点=1
print("50th percentile (axis=1):",
np.percentile(Arr, 50, axis=1))
上述代码的输出将是:
Array is:
[[10 20 30]
[40 50 60]]
50th percentile (axis=0): [25. 35. 45.]
50th percentile (axis=1): [20. 50.]
示例:使用插值参数
interpolation 参数可用于指定计算百分位数时要使用的插值方法。考虑下面的示例:
import numpy as np
Arr = np.array([[10,20, 30],[40, 50, 60]])
print("Array is:")
print(Arr)
print()
#计算第50个百分位点
print("50th percentile:",
np.percentile(Arr, 50, interpolation='lower'))
print()
#计算 (25, 50, 75) 百分位数
print("[25, 50, 75] percentile:\n",
np.percentile(Arr, (25, 50, 75), interpolation='lower'))
上述代码的输出将是:
Array is:
[[10 20 30]
[40 50 60]]
50th percentile: 30
[25, 50, 75] percentile:
[20 30 40]
示例:可视化插值方法
不同类型的插值可以以图形方式可视化:
import numpy as np
import matplotlib.pyplot as plt
x = [0, 1, 2, 3]
p = np.linspace(0, 100, 5000)
fig, ax = plt.subplots()
lines = [
('linear', None),
('higher', '--'),
('lower', '--'),
('nearest', '-.'),
('midpoint', '-.'),
]
for method, style in lines:
ax.plot(p, np.percentile(x, p, interpolation=method),
label=method, linestyle=style)
ax.set(title='Interpolation methods for list: ' + str(x),
xlabel='Percentile',
ylabel='List item returned',
yticks=x)
ax.legend()
plt.show()
上述代码的输出将是: