[python] 파이썬 NumPy에서 np.mean () 대 np.average ()?

나는

In [30]: np.mean([1, 2, 3])
Out[30]: 2.0

In [31]: np.average([1, 2, 3])
Out[31]: 2.0

그러나 두 가지 기능이 있기 때문에 약간의 차이가 있습니다.

그들 사이의 차이점은 무엇입니까?



답변

np.average는 선택적 무게 매개 변수를 사용합니다. 제공되지 않으면 동일합니다. 소스 코드를 살펴보십시오 : Mean , Average

np. 평균 :

try:
    mean = a.mean
except AttributeError:
    return _wrapit(a, 'mean', axis, dtype, out)
return mean(axis, dtype, out)

np. 평균 :

...
if weights is None :
    avg = a.mean(axis)
    scl = avg.dtype.type(a.size/avg.size)
else:
    #code that does weighted mean here

if returned: #returned is another optional argument
    scl = np.multiply(avg, 0) + scl
    return avg, scl
else:
    return avg
...


답변

np.mean 항상 산술 평균을 계산하고 입력 및 출력에 대한 몇 가지 추가 옵션 (예 : 사용할 데이터 유형, 결과 위치)이 있습니다.

np.averageweights매개 변수가 제공 되면 가중 평균을 계산할 수 있습니다 .


답변

일부 버전의 numpy 에는 알아야 할 또 다른 중요한 차이점이 있습니다.

average 마스크를 고려하지 않으므로 전체 데이터 세트에 대한 평균을 계산하십시오.

mean 마스크를 고려하므로 마스크되지 않은 값에 대해서만 평균을 계산하십시오.

g = [1,2,3,55,66,77]
f = np.ma.masked_greater(g,5)

np.average(f)
Out: 34.0

np.mean(f)
Out: 2.0


답변

호출에서 두 기능은 동일합니다.

average 그러나 가중 평균을 계산할 수 있습니다.

문서 링크 : meanaverage


답변

이미 언급 한 차이뿐만 아니라, 내가 지금 어려운 방법을 발견 한 또 다른 매우 중요한 차이가 있습니다 : 달리 np.mean, np.average허용하지 않는 dtype경우에 정확한 결과를 얻기위한 필수 키워드를. h5파일 에서 액세스하는 매우 큰 단 정밀도 배열이 있습니다 . 축 0과 1을 따라 평균을 취하면 dtype='float64'다음을 지정하지 않으면 매우 잘못된 결과가 나타납니다 .

>T.shape
(4096, 4096, 720)
>T.dtype
dtype('<f4')

m1 = np.average(T, axis=(0,1))                #  garbage
m2 = np.mean(T, axis=(0,1))                   #  the same garbage
m3 = np.mean(T, axis=(0,1), dtype='float64')  # correct results

불행히도, 무엇을 찾아야하는지 알지 못한다면 반드시 결과가 잘못되었다고 말할 수는 없습니다. np.average이런 이유로 다시는 사용하지 않지만 항상 np.mean(.., dtype='float64')큰 배열에서 사용합니다. 가중 평균을 원하면 가중치 벡터와 대상 배열의 곱을 사용하여 명시 적으로 계산 한 다음 적절한 np.sum또는 np.mean적절한 (적절한 정밀도로) 계산합니다.


답변