Saya melihat itu
In [30]: np.mean([1, 2, 3])
Out[30]: 2.0
In [31]: np.average([1, 2, 3])
Out[31]: 2.0
Namun, harus ada beberapa perbedaan, karena bagaimanapun keduanya adalah dua fungsi yang berbeda.
Apa perbedaan di antara mereka?
Saya melihat itu
In [30]: np.mean([1, 2, 3])
Out[30]: 2.0
In [31]: np.average([1, 2, 3])
Out[31]: 2.0
Namun, harus ada beberapa perbedaan, karena bagaimanapun keduanya adalah dua fungsi yang berbeda.
Apa perbedaan di antara mereka?
Jawaban:
np.average mengambil parameter bobot opsional. Jika tidak disediakan mereka setara. Lihatlah kode sumber: Mean , Average
np.berarti:
try:
mean = a.mean
except AttributeError:
return _wrapit(a, 'mean', axis, dtype, out)
return mean(axis, dtype, out)
np.rata-rata:
...
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
karena weights
sudah opsional. Tampaknya tidak perlu dan hanya berfungsi untuk membingungkan pengguna.
Dalam beberapa versi numpy ada perbedaan penting yang harus Anda ketahui:
average
jangan mengambil topeng akun, jadi hitung rata-rata seluruh set data.
mean
mengambil topeng akun, jadi hitung rata-rata hanya di atas nilai yang belum kedok.
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.ma.average
berfungsi. Juga, ada laporan bug .
Dalam doa Anda, kedua fungsi itu sama.
average
dapat menghitung rata-rata tertimbang sekalipun.
Selain perbedaan yang telah dicatat, ada perbedaan lain yang sangat penting yang baru saja saya temukan dengan cara yang sulit: tidak seperti np.mean
, np.average
tidak mengizinkan dtype
kata kunci, yang penting untuk mendapatkan hasil yang benar dalam beberapa kasus. Saya memiliki array presisi tunggal yang sangat besar yang diakses dari h5
file. Jika saya mengambil nilai rata-rata sepanjang sumbu 0 dan 1, saya mendapatkan hasil yang sangat salah kecuali jika saya menentukan 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
Sayangnya, kecuali Anda tahu apa yang harus dicari, Anda tidak dapat selalu mengatakan bahwa hasil Anda salah. Saya tidak akan pernah menggunakan np.average
lagi karena alasan ini tetapi akan selalu digunakan np.mean(.., dtype='float64')
pada array besar. Jika saya ingin rata-rata tertimbang, saya akan menghitungnya secara eksplisit menggunakan produk dari vektor bobot dan array target dan kemudian salah satu , np.sum
atau np.mean
sesuai (dengan presisi yang sesuai juga).