2017-02-21 26 views
1

Я хотел бы применитьрезультата от numpy.percentile к своему аргументу, то есть карта каждого числа во входном векторе ее квантиль.номера карты в их процентили

Например, если v=np.array([1,2,3,4]), и я хочу только два квантили (больше и меньше, чем медиана), я хотел бы получить np.array([0,0,1,1]) рассказывал мне, что первые два элемента v меньше, чем медиана, и последние два больше, чем медиана.

Обратите внимание, что меня интересует, скажем, децилирование, а не только медиана!

IOW, @PaulPanzer ударил гвоздь:

np.digitize(v,np.percentile(v,quantiles)) 

спасибо!

+2

посмотреть на 'numpy.digitize' –

+0

@PaulPanzer: пожалуйста, включите ваш комментарий в ответ, и я примет его. – sds

ответ

2

Использование np.digitize:

perc = np.percentile(data, q) 
indices = np.digitize(data, perc) 

Пример q = [25,50,75], data = np.arange(8):

indices 
# array([0, 0, 1, 1, 2, 2, 3, 3]) 
3
(v > np.percentile(v, 50)).astype(int) 
Out[93]: 
array([0, 0, 1, 1]) 
+0

Что мне делать, скажем, 10 процентов, а не только медианное? – sds

+0

Похоже, вы получили ответ. Я собирался предложить нечто вроде 'np.digitize (v, bins = np.percentile (v, np.arange (10, 100, 10))). – Psidom