2D 배열의 차원에서 평균 계산


82

다음 a과 같은 배열 이 있습니다.

a = [[40, 10], [50, 11]]

각 차원의 평균을 개별적으로 계산해야합니다. 결과는 다음과 같아야합니다.

[45, 10.5]

45의 평균 a[*][0]이고 10.5의 평균이 a[*][1]됩니다.

루프를 사용하지 않고 이것을 해결하는 가장 우아한 방법은 무엇입니까?

답변:


131

a.mean()axis인수를 취합니다 .

In [1]: import numpy as np

In [2]: a = np.array([[40, 10], [50, 11]])

In [3]: a.mean(axis=1)     # to take the mean of each row
Out[3]: array([ 25. ,  30.5])

In [4]: a.mean(axis=0)     # to take the mean of each col
Out[4]: array([ 45. ,  10.5])

또는 독립형 기능으로 :

In [5]: np.mean(a, axis=1)
Out[5]: array([ 25. ,  30.5])

슬라이싱이 작동하지 않는 이유는 다음과 같은 슬라이싱 구문 때문입니다.

In [6]: a[:,0].mean() # first column
Out[6]: 45.0

In [7]: a[:,1].mean() # second column
Out[7]: 10.5

빠른 답변에 감사드립니다. 무슨 In [n]:뜻이야? 이것은 코드의 일부입니까?
otmezger

나는 numpy를 사용하고 있으므로 2 번과 3 번 줄은 훌륭하게 작동하지만 axis=0대신axis=1
otmezger

@otmezger axis=0는 다음 줄에 있습니다. 더 많은 정보를 표시하고 새로 고치도록 편집했습니다.
askewchan

1
@otmezger 천만에요. 많은 numpy 배열 메서드는 이와 같이 축 인수를 사용합니다.
askewchan

1
@askewchan : mean = np.mean(a, axis=(0,2,3)) mean? 입력 텐서 (a)가 모양 (배치, 채널, 너비, 높이)이라는 것을 아는 것은 무엇 입니까?
Rika

13

다음은 numpy가 아닌 솔루션입니다.

>>> a = [[40, 10], [50, 11]]
>>> [float(sum(l))/len(l) for l in zip(*a)]
[45.0, 10.5]

4

이것을 많이한다면 NumPy 가 갈 길이다.

어떤 이유로 NumPy를 사용할 수없는 경우 :

>>> map(lambda x:sum(x)/float(len(x)), zip(*a))
[45.0, 10.5]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.