Ho una matrice con forma (64,17) corrisponde al tempo & latitudine. Voglio prendere una media ponderata della latitudine, che so che np.average può fare perché, a differenza di np.nanmean, che ho usato per mediare le longitudini, i pesi possono essere usati negli argomenti. Tuttavia, np.average non ignora NaN come fa np.nanmean, quindi le mie prime 5 voci di ogni riga sono incluse nella media della latitudine e rendono l'intera serie storica piena di NaN.Prendendo np.average ignorando NaN?
C'è un modo per prendere una media ponderata senza che i NaN vengano inclusi nel calcolo?
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[:]
uscita:
[ 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]
Ho detto che non posso usare np.nanmean perché non prende i pesi nei suoi argomenti. Sto cercando di fare una media ponderata. – ChristineB
Ho aggiornato la risposta per utilizzare un array mascherato e 'np.mean' – Jaco
Stavo per modificare una menzione nel post originale che dal momento che sto facendo una serie temporale, rimuovere il NaN dai dati è anche un'opzione, ma mi hai battuto per questo! – ChristineB