나는
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.average
weights
매개 변수가 제공 되면 가중 평균을 계산할 수 있습니다 .
답변
일부 버전의 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
답변
답변
이미 언급 한 차이뿐만 아니라, 내가 지금 어려운 방법을 발견 한 또 다른 매우 중요한 차이가 있습니다 : 달리 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
적절한 (적절한 정밀도로) 계산합니다.