Numpy 函数获取与给定值对应的分位数

Art*_*Sbr 14 python numpy quantile

我看到很多类似 R 的问题,但我找不到专门针对 Python 的问题,最好使用 numpy。

假设我有一组观察结果存储在x. q * 100我可以获得人口累计百分比的值。

# Import numpy
import numpy as np

# Get 75th percentile
np.quantile(a=x, q=0.75)
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有一个函数可以实现相反的功能。也就是说,一个 numpy 函数将一个值作为输入并返回q

为了进一步扩展这一点,scipy 分发对象有一个ppf方法可以让我做到这一点。我正在寻找 numpy 中类似的东西。它存在吗?

loo*_*alt 18

不是一个现成的函数,而是一个紧凑且相当快速的片段:

(a<value).mean()
Run Code Online (Sandbox Code Playgroud)

您可以(至少在我的机器上)通过使用来获得更好的性能np.count_nonzero

np.count_nonzero(a<value) / a.size
Run Code Online (Sandbox Code Playgroud)

但说实话我什至都懒得理会。


Bat*_*aBe 9

有一个方便的函数可以做到这一点。请注意,这不是精确的逆,因为quantile/percentile函数不精确。给定有限的观察数组,百分位数将具有离散值;换句话说,您可以指定q介于这些值之间的 a,并且函数会找到最接近的值。

from scipy import stats
import numpy as np

stats.percentileofscore(np.arange(0,1,0.12), .65, 'weak') / 100
Run Code Online (Sandbox Code Playgroud)