- 定义
- 解析参数
- 例子
- 插值方法可视化
numpy.percentile(a, q, axis=None, out=None, overwrite_input=False, interpolation=‘linear’, keepdims=False)
沿指定轴计算数据的第 q 个百分位数。
返回数组元素的第 q 个百分位数。
a :类型 array_like 输入数组或可转换为数组的对象
q: array_like of float 要计算的百分位数或百分位数序列,必须介于 0 和 100 之间(包括 0 和 100)。
axis: {int, tuple of int, None} 可选 计算百分位数的轴。 默认值是沿着数组的扁平版本计算百分位数。
out: ndarray 可选 用于放置结果的可替代的输出数组。 它必须具有与预期输出相同的形状和缓冲区长度,但如有必要,将转换(输出的)类型。
overwrite_input: 布尔值 可选 如果为 True,则允许通过中间计算修改输入数组 a,以节省内存。 在这种情况下,此函数完成后输入 a 的内容是未定义的。
interpolation:{‘linear’, ‘lower’, ‘higher’, ‘midpoint’, ‘nearest’}
此可选参数指定当所需百分位数位于两个数据点 i < j 之间时使用的插值方法
liear:i + (j - i) * fraction 其中分数(fraction)是由 i 和 j 包围的索引的小数部分
lower:i
higher: j
midpoint:(i+j)/2
nearest :i或者j,近的那一个
keepdim:布尔值 可选
如果将其设置为 True,则减少的轴将作为尺寸为 1 的维度保留在结果中。 使用此选项,结果将针对原始数组 a 正确广播。
返回值 percentile 标量 或者 ndarray
如果 q 是单个百分位数且axis = None,则结果为标量。 如果给出多个百分位数,则结果的第一个轴对应于百分位数。 其他轴是 a 减少后剩余的轴。 如果输入包含小于 float64 的整数或浮点数,则输出数据类型为 float64。 否则,输出数据类型与输入相同。 如果指定了 out,则返回该数组。
a = np.array([[10, 7, 4], [3, 2, 1]])
a
array([[10, 7, 4],
[ 3, 2, 1]])
np.percentile(a, 50)
3.5
//3.5 = (4+3)/2
np.percentile(a, 50, axis=0)
array([6.5, 4.5, 2.5])
//6.5 = (10+3)/2, 4.5=(7+2)/2 2.5=(4+1)/2
np.percentile(a, 50, axis=1)
array([7., 2.])
np.percentile(a, 50, axis=1, keepdims=True)
array([[7.],
[2.]])
m = np.percentile(a, 50, axis=0)
out = np.zeros_like(m)
np.percentile(a, 50, axis=0, out=out)
array([6.5, 4.5, 2.5])
m
array([6.5, 4.5, 2.5])
b = a.copy()
np.percentile(b, 50, axis=1, overwrite_input=True)
array([7., 2.])
assert not np.all(a == b)
不同类型的插值可以以图形方式显示:
a = np.arange(4)
p = np.linspace(0, 100, 6001)
ax = plt.gca()
lines = [
(‘linear’, None),
(‘higher’, ‘–’),
(‘lower’, ‘–’),
(‘nearest’, ‘-.’),
(‘midpoint’, ‘-.’),
]
for interpolation, style in lines:
ax.plot(
p, np.percentile(a, p, interpolation=interpolation),
label=interpolation, linestyle=style)
ax.set(
title='Interpolation methods for list: ’ + str(a),
xlabel=‘Percentile’,
ylabel=‘List item returned’,
yticks=a)
ax.legend()
plt.show()



