numpy.
percentile
沿指定轴计算数据的第Q百分位。
返回数组元素的第Q个百分点值。
可以转换为数组的输入数组或对象。
要计算的百分位数或百分位数序列,必须介于0和100之间(含0和100)。
计算百分位的轴。默认值是沿着数组的扁平版本计算百分位数。
在 1.9.0 版更改: 支持轴的元组
用于放置结果的可选输出数组。它必须具有与预期输出相同的形状和缓冲区长度,但如果需要,将强制转换(输出的)类型。
如果为真,则允许输入数组 a 通过中间计算进行修改,以节省内存。在这种情况下,输入的内容 a 此函数完成后未定义。
此可选参数指定当所需百分比位于两个数据点之间时要使用的插值方法 i < j :
i < j
“线性”: i + (j - i) * fraction 在哪里 fraction 索引的小数部分是否被 i 和 j .
i + (j - i) * fraction
fraction
i
j
“下”: i .
“更高”: j .
“最近”: i 或 j ,以最近者为准。
“中点”: (i + j) / 2 .
(i + j) / 2
1.9.0 新版功能.
如果设置为“真”,则缩小的轴将保留在结果中,作为尺寸为1的尺寸。使用此选项,结果将针对原始数组正确广播 a .
如果 q 是一个百分位数 axis=None ,则结果是一个标量。如果给出多个百分位数,则结果的第一个轴对应于百分位数。其他轴是在减少 a . 如果输入包含小于 float64 ,输出数据类型为 float64 . 否则,输出数据类型与输入数据类型相同。如果 out 则返回该数组。
float64
参见
mean
median
相当于 percentile(..., 50)
percentile(..., 50)
nanpercentile
quantile
等于百分位数,Q在范围内的除外 [0, 1] .
笔记
给定向量 V 长度的 N ,的第q个百分位数 V 是价值 q/100 从最小值到最大值的排序方式 V . 两个最近邻的值和距离以及 interpolation 如果标准化排名与 q 确切地。此函数与中值if相同 q=50 ,与最小的if相同 q=0 与最大值相同,如果 q=100 .
V
N
q/100
q
q=50
q=0
q=100
实例
>>> a = np.array([[10, 7, 4], [3, 2, 1]]) >>> a array([[10, 7, 4], [ 3, 2, 1]]) >>> np.percentile(a, 50) 3.5 >>> np.percentile(a, 50, axis=0) array([6.5, 4.5, 2.5]) >>> 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)
不同类型的插值可以图形化显示:
import matplotlib.pyplot as plt 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()