나는
In [30]: np.mean([1, 2, 3])
Out[30]: 2.0
In [31]: np.average([1, 2, 3])
Out[31]: 2.0
그러나 두 가지 기능이 있기 때문에 약간의 차이가 있습니다.
그들 사이의 차이점은 무엇입니까?
나는
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.average
이므로 그들이 제공 해야하는 것 같습니다 weights
. 불필요한 것처럼 보이며 사용자를 혼란스럽게합니다.
이미 언급 한 차이뿐만 아니라, 내가 지금 어려운 방법을 발견 한 또 다른 매우 중요한 차이가 있습니다 : 달리 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
적절한 (적절한 정밀도로) 계산합니다.