Mam matrycę o kształcie (64,17) odpowiada czasowi & szerokości geograficznej. Chcę wziąć średnią ważoną szerokość geograficzną, o której wiem, że np.average może zrobić, ponieważ, w przeciwieństwie do np.nanmean, którą zwykłem uśredniać długości, w argumentach można stosować wagi. Jednak np.average nie ignoruje NaN jak np.nanmean, więc moje pierwsze 5 wpisów z każdego rzędu są ujęte w uśrednianiu szerokości i sprawiają, że cała seria czasowa jest pełna NaN.Biorąc np.average ignorując NaN's?
Czy istnieje sposób, aby wziąć średnią ważoną bez uwzględnienia NaN w obliczeniach?
file = Dataset("sst_aso_1951-2014latlon_seasavgs.nc")
sst = file.variables['sst']
lat = file.variables['lat']
sst_filt = np.asarray(sst)
missing_values_indices = sst_filt < -8000000 #missing values have value -infinity
sst_filt[missing_values_indices] = np.nan #all missing values set to NaN
weights = np.cos(np.deg2rad(lat))
sst_zonalavg = np.nanmean(sst_filt, axis=2)
print sst_zonalavg[0,:]
sst_ts = np.average(sst_zonalavg, axis=1, weights=weights)
print sst_ts[:]
wyjściowa:
[ nan nan nan nan nan
27.08499908 27.33333397 28.1457119 28.32899857 28.34454346
28.27285767 28.18571472 28.10199928 28.10812378 28.03411865
28.06411552 28.16529465]
[ nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan]
Wspomniałem, że nie mogę używać np.nanmean, ponieważ nie bierze on wagi w swoich argumentach. Próbuję zrobić średnią ważoną. – ChristineB
Zaktualizowałem odpowiedź, aby użyć zamaskowanej tablicy i 'np.mean' – Jaco
miałem zamiar edytować wzmiankę w oryginalnym wpisie, że ponieważ robię szereg czasowy, usunięcie NaN z danych jest również opcją, ale mnie biłeś! – ChristineB