Существует ли удобный способ вычислить процентили для последовательности или одно-мерного массива numpy?
Я ищу что-то подобное функции процентили Excel.
Я смотрел в ссылке статистики NumPy и не мог найти это. Все, что я мог найти, является медианой (50-я процентиль), но не что-то более определенное.
Возможно, вас заинтересует пакет SciPy Stats . Он имеет процентильную функцию , которую вы ищете, и многие другие статистические полезности.
процентиль ()
также доступен в numpy
.
import numpy as np
a = np.array([1,2,3,4,5])
p = np.percentile(a, 50) # return 50th percentile, e.g median.
print p
3.0
Этот билет наводит меня на мысль, что в ближайшее время они не будут интегрировать percentile ()
в numpy.
Кстати, есть реализация процентильной функции на чистом Python , на случай, если кто-то не хочет зависеть от scipy. Функция скопирована ниже:
## {{{ http://code.activestate.com/recipes/511478/ (r1)
import math
import functools
def percentile(N, percent, key=lambda x:x):
"""
Find the percentile of a list of values.
@parameter N - is a list of values. Note N MUST BE already sorted.
@parameter percent - a float value from 0.0 to 1.0.
@parameter key - optional key function to compute value from each element of N.
@return - the percentile of the values
"""
if not N:
return None
k = (len(N)-1) * percent
f = math.floor(k)
c = math.ceil(k)
if f == c:
return key(N[int(k)])
d0 = key(N[int(f)]) * (c-k)
d1 = key(N[int(c)]) * (k-f)
return d0+d1
# median is 50th percentile.
median = functools.partial(percentile, percent=0.5)
## end of http://code.activestate.com/recipes/511478/ }}}