根据想要计算百分位数的插值方法类型,可以使用各种选项。
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。
从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
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])
根据想要计算百分位数的插值方法类型,可以使用各种选项。