使用Numpy,如何计算数字1到10的25个百分位数?

问题描述 投票:0回答:3
from numpy import percentile
import numpy as np
data=np.array([1,2,3,4,5,6,7,8,9,10])
# calculate quartiles
quartile_1 = percentile(data, 25)
quartile_3 =percentile(data, 75)
# calculate min/max

print(quartile_1) # show 3.25
print(quartile_3) # shows 7.75

您能否解释如何计算3.25和7.75值?我希望它们分别是3和8。

python numpy percentile quartile iqr
3个回答
0
投票

numpy documentation

给定长度为N的向量V,V的第q个百分位数是排序的副本中从最小到最大的方式的q / 100V.两个最近邻居的值和距离以及插值参数将确定百分位数,如果归一化排名与q的位置不完全匹配。这个如果q = 50,则函数与中位数相同;如果q = 50,则函数与中位数相同q = 0,如果q = 100,则等于最大值。

所以问题是当未找到与分位数完全匹配时,numpy会如何反应。如果使用interpolation="nearest",您将获得期望得到的结果:

>>> from numpy import percentile
>>> import numpy as np
>>> data=np.array([1,2,3,4,5,6,7,8,9,10])
>>> # calculate quartiles
... quartile_1 = percentile(data, 25, interpolation="nearest")
>>> quartile_3 = percentile(data, 75, interpolation="nearest")
>>> print(quartile_1) 
3
>>> print(quartile_3) 
8

0
投票

Numpy的1.9.0版或更高版本具有可选的'interpolation'参数,默认情况下为线性。

此可选参数指定当所需百分位数位于两个数据点i

“线性”:i +(j-i)*分数,其中分数是被i和j包围的索引的分数部分。

如果您想改变这种行为,您只想手动添加参数并使用interpolation='nearest’覆盖默认值>

根据想要计算百分位数的插值方法类型,可以使用各种选项。

a = np.arange(1, 11)
a  # array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

np.percentile(a, (25, 75), interpolation='midpoint') # array([3.5, 7.5])
np.percentile(a, (25, 75), interpolation='nearest')  # array([3, 8])
np.percentile(a, (25, 75), interpolation='nearest')  # array([3, 8])
np.percentile(a, (25, 75), interpolation='linear')   # array([3.25, 7.75])
np.percentile(a, (25, 75), interpolation='lower')    # array([3, 7])
np.percentile(a, (25, 75), interpolation='higher')   # array([4, 8])

0
投票

根据想要计算百分位数的插值方法类型,可以使用各种选项。

© www.soinside.com 2019 - 2024. All rights reserved.