2011-07-29 6 views
2

나는 배열 A를 가지고 있는데,이리스트 L을 부르기로한다.numpy/scipy에서 벡터화 된 색인/조각화?

A [s1 : t1]의 85 백분위 수를 찾고 싶다. A [s2 : t2] ...

numpy에서 이러한 연산을 벡터화하는 방법이 있습니까?

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

보입니다.

고맙습니다.

추 신 : s1로 가정하는 것이 안전합니다. < s2 .... t1 < t2 ..... 이것은 슬라이딩 윈도우 백분위 수 문제입니다.

+1

'A'의 모양은 무엇입니까? 그것이 (n,)이면't_k-s_k'는 모든'k'에 대해 일정할까요? 나는. 슬라이딩 윈도우의 너비가 일정합니까? 감사합니다 – eat

+0

@ 녀석 : 내 슬라이딩 윈도우는 일정한 폭을 가지지 않습니다 .b/c 샘플 속도는 불행히도 일정하지 않습니다. A의 모양은 한 차원입니다. – CodeNoob

+0

@eat : 상수 너비 슬라이딩 창에 벡터화 된 알고리즘이 있는지 알고 싶습니다. – CodeNoob

답변

1

균일하지 않은 간격 (즉, 슬라이스 크기가 동일하지 않음)을 처리한다고 가정하면 numpy를 단일 함수 호출에서 수행 할 방법이 없습니다.

균일 한 슬라이스 크기라면 @eat가 주석을 달아 여러 트릭을 사용할 수 있습니다.

그러나 목록 이해가 잘못 되었나요? 위의 루프와 정확히 같습니다.하지만 걱정되는 경우 "깨끗한"모양입니다.

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

나는 실제로 런타임 성능을 더 걱정하고 있습니다. – CodeNoob