2016-05-13 3 views
2

Простой вопрос, но я не могу заставить его работать. У меня есть массив с формой (2000, 1). Из этого массива я хочу рассчитать 99-й процентиль на 40 строк и вернуть логический массив той же длины, где все выше 99-го процентиля истинно, а остальное ложно. Для первого 40 я могу сделать:Вычислить процентиль за установленный интервал в массиве python

a = np.random.rand(2000,1) 
maxper40 = a[0:40] > np.percentile(a[0:40], 99) 

я могу сделать что-то вроде этого, чтобы получить движущееся окно:

windowSize = 40 
for i in range(0,len(a)-windowSize+1): 
    print max(a[i:i+windowSize]) 

Как бы двигаться через массив с интервалом 40, вычислить 99 процентилей за интервал и возвращать булевский массив той же длины, что и вход?

Большое спасибо!

ответ

2

Вы можете изменить свой массив, 50x40 и получить процентиль каждого:

a.reshape(50, 40) > np.percentile(a.reshape(50, 40), 99, axis=0) 

Это возвращает массив размера (50, 40). Если вы хотите 1D массив, который вы можете позвонить выравниваться после:

(a.reshape(50, 40) > np.percentile(a.reshape(50, 40), 99, axis=0)).flatten() 
+0

мне пришлось перенести массивы с '.T' и добавить 'флаг' F'' в сглаживаются и затем он работал как шарм, спасибо! – cf2

+0

Рад, что это сработало. Добро пожаловать. :) – ayhan

Смежные вопросы