それに気づく
In [30]: np.mean([1, 2, 3])
Out[30]: 2.0
In [31]: np.average([1, 2, 3])
Out[31]: 2.0ただし、やはり2つの異なる関数であるため、いくつかの違いがあるはずです。
それらの違いは何ですか?
それに気づく
In [30]: np.mean([1, 2, 3])
Out[30]: 2.0
In [31]: np.average([1, 2, 3])
Out[31]: 2.0ただし、やはり2つの異なる関数であるため、いくつかの違いがあるはずです。
それらの違いは何ですか?
回答:
np.averageはオプションの重みパラメータを取ります。指定されていない場合は同等です。ソースコードを見てください:平均、平均
np.mean:
try:
    mean = a.mean
except AttributeError:
    return _wrapit(a, 'mean', axis, dtype, out)
return mean(axis, dtype, out)np.average:
...
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必要があるようです。不要と思われ、ユーザーを混乱させるだけです。
                    すでに述べた違いに加えて、今私が今困難な方法で発見したもう1つの非常に重要な違いがあります:とは異なり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を適宜使用します。