Векторизация индексирования / нарезки в NumPy / Scipy? - PullRequest
2 голосов
/ 29 июля 2011

У меня есть массив A, и у меня есть список индексов срезов (s, t), назовем этот список L.

Я хочу найти 85 процентилей A [s1: t1], A [s2: t2] ...

Есть ли способ векторизовать эти операции в numpy?

ans = []
for (s,t) in L:
   ans.append( numpy.percentile( A[s:t], 85) ); 

выглядит громоздко.

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

PS: можно с уверенностью предположить, что s1

1 Ответ

1 голос
/ 30 июля 2011

Учитывая, что вы имеете дело с неоднородным интервалом (т. Е. Срезы имеют разный размер), нет, нет способа заставить numpy сделать это за один вызов функции.

Еслиэто был равномерный размер фрагмента, тогда вы могли бы делать это с помощью различных трюков, как прокомментировал @eat.

Однако, что не так с пониманием списка?Это в точности соответствует вашему циклу выше, но выглядит «чище», если вы об этом беспокоитесь.

ans = [numpy.percentile(A[s:t], 85) for s,t in L]
...