NumPy 函数

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() 

上述代码的输出将是:

NumPy percentile() 函数