2010-01-13 5 views
0

특정 크기의 목록 (또는 배열)에서 물어 뜯고 그 물린 평균을 반환하고 다음 물기로 넘어 가서 다시 해보고 싶습니다. for 루프를 작성하지 않고이를 수행 할 수있는 방법이 있습니까?특정 크기의 하위 섹션을 파이썬으로 평균 계산하는 방법은 무엇입니까?

In [1]: import numpy as np 
In [2]: x = range(10) 
In [3]: np.average(x[:4]) 
Out[3]: 1.5 
In [4]: np.average(x[4:8]) 
Out[4]: 5.5 
In [5]: np.average(x[8:]) 
Out[5]: 8.5 

내가 np.average 같은 뭔가를 찾고 있어요 (X의 [: bitesize = 4])으로 돌아 가기 : [1.5,5.5,8.5].

배열을 잘라내어 스테핑하는 방법을 살펴 보았지만 일어날 일이있는 것을 발견하지 못했습니다.

+1

왜 루프를 쓰고 싶지 않아? 사람들이 임의의 통제 구조없이 무언가를하려고 할 때 질문을하면 종종 "한 줄에 가능한 한 많이"사고 방식에 빠져 있다고 제안합니다. 당신이 걱정하고있는 성능이라면, 말하고, 당신이 다루는 데이터의 크기에 대한 예를 들어 사람들이 무엇을 테스트해야하는지 알게하십시오. –

+0

for 루프를 작성할 수는 있지만, 예를 들어 배열을 단계별로 처리 할 수있을 때까지 루프에 대해 작성한 다른 많은 목록 또는 배열 조작과 동일한 느낌을주었습니다. 그래서 물었다. 또한 for 루프는 for 루프를 시작하고 if 문 (또는 두 개)을 실행하고 새 목록에 값을 추가하는 등의 새로운 목록을 선언했을 것입니다. 그래서 한 사람이 이미 대답 한 for 루프는 제게 분명하고 프로그래밍상의 의미에서 비극적이었습니다. – JBWhitmore

답변

5
[np.average(x[i:i+4]) for i in xrange(0, len(x), 4) ]
1

NumPy와를 사용하여, 당신은 axis 키워드 np.average를 사용할 수 있습니다

import numpy as np 
x=np.arange(12) 
y=x.reshape(3,4) 
print(y) 
# [[ 0 1 2 3] 
# [ 4 5 6 7] 
# [ 8 9 10 11]] 
print(np.average(y,axis=1)) 
# [ 1.5 5.5 9.5] 

x을 바꿀 수있는,이에 (그룹 크기로 나누어 길이가 x 시작했습니다 케이스 4).

길이가 x 인 경우 그룹 크기로 균등하게 나눌 수없는 경우 마스크 된 배열을 만들고 np.ma.average을 사용하여 적절한 평균을 계산할 수 있습니다. 예를 들어

,

x=np.ma.arange(12) 
y=x.reshape(3,4) 
mask=(x>=10) 
y.mask=mask 
print(y) 
# [[0 1 2 3] 
# [4 5 6 7] 
# [8 9 -- --]] 
print(np.ma.average(y,axis=1)) 
# [1.5 5.5 8.5] 
+0

이것은 실제로 내가 가졌지 만 묻지 않은 잠재 마스크 배열 질문에 응답합니다. – JBWhitmore

관련 문제