Ich habe eine Matrix mit Form (64,17) entsprechen der Zeit & Breite. Ich möchte einen gewichteten Breitenmittelwert nehmen, von dem ich weiß, dass np.average dies kann, weil im Gegensatz zu np.nanmean, mit dem ich die Längenwerte durchschnitt, Gewichte in den Argumenten verwendet werden können. Np.average ignoriert NaN jedoch nicht wie np.nanmean, daher sind meine ersten 5 Einträge jeder Zeile in der Breitenmittelung enthalten und machen die gesamte Zeitreihe mit NaN voll.Nehmen Sie nP.-Durchschnitt, während Sie NaN ignorieren?
Gibt es eine Möglichkeit, einen gewichteten Durchschnitt zu nehmen, ohne dass die NaN in die Berechnung einbezogen werden?
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[:]
Ausgang:
[ 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]
Ich erwähnte, dass ich np.nanmean nicht verwenden kann, weil es Gewichte in seinen Argumenten nicht nimmt. Ich versuche einen gewichteten Durchschnitt zu machen. – ChristineB
Ich habe die Antwort aktualisiert, um ein maskiertes Array zu verwenden und 'np.mean' – Jaco
Ich war im Begriff, eine Erwähnung in den ursprünglichen Beitrag zu bearbeiten, dass, da ich eine Zeitreihe mache, das Entfernen des NaN aus den Daten auch eine Option ist, aber du hast mich dazu geschlagen! – ChristineB