使用numpy或scipy,是否有任何现有方法将返回包含1D数组中指定百分比值的间隔的端点?我意识到这对我自己来说很简单,但它似乎可能是内置的东西,虽然我无法找到它。
E.g:
>>> import numpy as np
>>> x = np.random.randn(100000)
>>> print(np.bounding_interval(x, 0.68))
会给approximately (-1, 1)
答案 0 :(得分:3)
您可以使用np.percentile
:
In [29]: x = np.random.randn(100000)
In [30]: p = 0.68
In [31]: lo = 50*(1 - p)
In [32]: hi = 50*(1 + p)
In [33]: np.percentile(x, [lo, hi])
Out[33]: array([-0.99206523, 1.0006089 ])
还有scipy.stats.scoreatpercentile
:
In [34]: scoreatpercentile(x, [lo, hi])
Out[34]: array([-0.99206523, 1.0006089 ])
答案 1 :(得分:0)
我不知道有这样做的内置函数,但您可以使用数学包编写一个来指定这样的近似索引:
from __future__ import division
import math
import numpy as np
def bound_interval(arr_in, interval):
lhs = (1 - interval) / 2 # Specify left-hand side chunk to exclude
rhs = 1 - lhs # and the right-hand side
sorted = np.sort(arr_in)
lower = sorted[math.floor(lhs * len(arr_in))] # use floor to get index
upper = sorted[math.floor(rhs * len(arr_in))]
return (lower, upper)
在指定的数组上,我得到了间隔(-0.99072237819851039, 0.98691691784955549)
。非常接近(-1, 1)
!