NumPy 배열을 분할하기 위해`numpy.digitize`를 사용한 후 각 bin의 평균을 계산하는 방법은 무엇입니까?

가는 발

빈으로 분할되는 입력 배열이 있으며 해당 빈의 평균을 계산하고 싶습니다. 다음 예를 가정 해 보겠습니다.

>>> import numpy as np
>>> a = np.array([1.4, 2.6, 0.7, 1.1])

다음과 같이 빈으로 나뉩니다 np.digitize.

>>> bins = np.arange(0, 2 + 1)
>>> indices = np.digitize(a, bins)
>>> indices
array([2, 3, 1, 2])

이것은 여기에서 더 명시 적으로 볼 수 있듯이 내가 기대하는 작업을 정확히 수행합니다.

>>> for i in range(len(bins)):
...     f"bin where {i} <= x < {i + 1} contains {a[indices == i + 1]}"
... 
'bin where 0 <= x < 1 contains [0.7]'
'bin where 1 <= x < 2 contains [1.4 1.1]'
'bin where 2 <= x < 3 contains [2.6]'

그러나 이제 각 빈의 평균을 얻고 싶습니다. for루프를 사용하여 NumPy가 아닌 방식으로 수행하는 것은 다음과 같습니다.

>>> b = np.array([a[indices == i + 1].mean() for i in range(len(bins))])
>>> b
array([0.7 , 1.25, 2.6 ])

그러나 for이것을 위해 루프를 사용하는 것은 우아하지도 (파이썬)도 효율적으로 보이지도 않습니다.리스트는 np.array나중에 NumPy 배열로 변환되어야하기 때문 입니다.

NumPy 방법은 무엇입니까?

꽝황

IIUC, 이것은 bincount:

np.bincount(indices-1,a)/np.bincount(indices-1)

산출:

array([0.7, 1.25, 2.6])

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관