2016-03-25 8 views
6

मेरे पास 330,000 से अधिक पंक्तियों के साथ एक np.array है। मैं बस इसका औसत लेने की कोशिश करता हूं और यह नाएन लौटाता है। भले ही मैं अपने सरणी में किसी भी संभावित NaN मानों को फ़िल्टर करने का प्रयास करता हूं (वैसे भी कोई भी नहीं होना चाहिए), औसत रिटर्न NaN। क्या मैं पूरी तरह से निराशाजनक कुछ कर रहा हूँ?एक numpy सरणी का औसत NaN

मेरे कोड यहाँ है:

average(ngma_heat_daily) 
Out[70]: nan 

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

उत्तर

5

इस प्रयास करें:

>>> np.nanmean(ngma_heat_daily) 

इस समारोह बूँदें NaN मतलब लेने से पहले अपने सरणी से महत्व देता है।

संपादित करें: कारण यह है कि average(ngma_heat_daily[ngma_heat_daily != nan]) काम नहीं करता है इस वजह से है:

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

आईईईई फ्लोटिंग प्वाइंट मानक के अनुसार, NaN खुद के बराबर नहीं है! आप एक ही विचार को लागू करने के बजाय ऐसा कर सकता है:

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

np.isnan, np.isinf, और समान कार्य डेटा मास्किंग के इस प्रकार के लिए बहुत उपयोगी हैं।

+0

यह काम किया! क्या आप समझा सकते हैं कि औसत औसत लेने के साथ क्या समस्या है? मेरे पास 16k प्रविष्टियों की एक और सरणी है (उसी मूल स्रोत से उत्पादित) जो औसत() विधि के साथ ठीक काम करता है। – Asif

+0

बस स्पष्टीकरण के साथ आपका संपादन देखा। धन्यवाद! – Asif

संबंधित मुद्दे