2016-03-25 25 views
6

'u döndürür 330.000'den fazla satır içeren bir np.array var. Ben sadece ortalamasını almaya çalışıyorum ve NaN döndürür. Dizimdeki herhangi bir potansiyel NaN değerini filtrelemeye çalışsa bile (herhangi bir şekilde olmamalıdır), ortalama NaN değerini döndürür. Tamamen tuhaf bir şey yapıyorum?Sayısal dizinin ortalaması, NaN

Kodum burada:

average(ngma_heat_daily) 
Out[70]: nan 

average(ngma_heat_daily[ngma_heat_daily != nan]) 
Out[71]: nan 

cevap

5

bu deneyin:

>>> np.nanmean(ngma_heat_daily) 

Bu fonksiyon NaN ortalamasını alarak önce diziden değerleri düşer.

Düzenleme: çalışmıyor average(ngma_heat_daily[ngma_heat_daily != nan]) nedeni bu nedenle geçerli: IEEE kayan nokta standardına göre

>>> np.nan == np.nan 
False 

, NaN kendisine eşit değildir!

>>> average(ngma_heat_daily[~np.isnan(ngma_heat_daily)]) 

np.isnan, np.isinf ve benzer fonksiyonlar veri maskeleme bu tür için çok yararlıdır: Aynı fikri uygulamaya yerine bunu yapabilir.

+0

Bu işe yaradı! Meselenin sadece ortalamayı alarak ne olduğunu açıklayabilir misiniz? Ortalama() yöntemi ile iyi çalışan 16k girişleri (aynı orijinal kaynaktan üretilmiş) başka bir dizim var. – Asif

+0

Düzenlemenizi açıklama ile görün. Teşekkürler! – Asif