मुद्दापायथन- np.mean() गलत साधन दे रहे हैं?
तो मैं 50 netCDF4 डेटा फ़ाइलों है कि एक वैश्विक ग्रिड पर मासिक तापमान भविष्यवाणियों के दशकों शामिल है। मैं np.mean() का उपयोग कर रहा हूं ताकि समय की लंबाई & स्थानिक पैमाने को संरक्षित करते हुए सभी 50 डेटा फ़ाइलों का एक साथ मिलकर औसत हो, लेकिन np.mean() मुझे दो अलग-अलग उत्तर देता है। पहली बार जब मैं कोड का अपना ब्लॉक चलाता हूं, तो यह मुझे एक संख्या देता है, जब अक्षांश & देशांतर & पर व्यक्तिगत रनों के खिलाफ प्लॉट किया गया है, जो कि समानता के मतलब से थोड़ा कम है। अगर मैं ब्लॉक को फिर से चलाता हूं, तो यह मुझे एक अलग अर्थ देता है जो सही दिखता है।
कोड
मैं हर पंक्ति यहाँ कॉपी नहीं कर सकते, क्योंकि यह लंबे समय से है, लेकिन यहाँ क्या मैं एक रन के लिए करते हैं।
#Historical (1950-2020) data
ncin_1 = Dataset("/project/wca/AR5/CanESM2/monthly/histr1/tas_Amon_CanESM2_historical-r1_r1i1p1_195001-202012.nc") #Import data file
tash1 = ncin_1.variables['tas'][:] #extract tas (temperature) variable
ncin_1.close() #close to save memory
#Repeat for future (2021-2100) data
ncin_1 = Dataset("/project/wca/AR5/CanESM2/monthly/histr1/tas_Amon_CanESM2_historical-r1_r1i1p1_202101-210012.nc")
tasr1 = ncin_1.variables['tas'][:]
ncin_1.close()
#Concatenate historical & future files together to make one time series array
tas11 = np.concatenate((tash1,tasr1),axis=0)
#Subtract the 1950-1979 mean to obtain anomalies
tas11 = tas11 - np.mean(tas11[0:359],axis=0,dtype=np.float64)
और मैं अन्य डेटासेट के लिए 49 गुना अधिक दोहराता हूं। प्रत्येक tas11, tas12, आदि फ़ाइल में आकार, अक्षांश, और देशांतर में समय की लंबाई के अनुरूप आकार (1812, 64, 128) होता है।
सम्मिलित करने के लिए, मैं निम्नलिखित करता हूं।
#Move all tas data to one array
alltas = np.zeros((1812,64,128,51)) #years, lat, lon, members (no ensemble mean value yet)
alltas[:,:,:,0] = tas11
(...)
alltas[:,:,:,49] = tas50
#Calculate ensemble mean & fill into 51st slot in axis 3
alltas[:,:,:,50] = np.mean(alltas,axis=3,dtype=np.float64)
जब मैं एक समन्वय & महीने, कलाकारों की टुकड़ी मतलब यह क्या किया जाना चाहिए से बंद है की जाँच करें। यहाँ 1950-2100 से विश्व स्तर पर औसतन तापमान के बढ़ने की साजिश पहले मतलब (साथ monhly मूल्यों वार्षिक मूल्यों में औसतन साथ कैसा दिखता है। काले लाइन है कलाकारों की टुकड़ी मतलब & रंग लाइनों व्यक्तिगत रूप से रन कर रहे हैं।
जाहिर है कि असली पहनावा के नीचे विचलित मतलब है। जब मैं alltas चलाता हूं तो साजिश कैसा दिखता है [:,:,:, 50] = np.mean (alltas, axis = 3, dtype = np.float64) दूसरी बार & बाकी सब कुछ रखें वही।
बहुत बेहतर है।
सवाल
क्यों np.mean() गलत मान पहली बार की गणना? मैंने इस प्रश्न में np.mean() का उपयोग करते समय डेटा प्रकार को फ्लोट के रूप में निर्दिष्ट करने का प्रयास किया- Wrong numpy mean value? लेकिन यह काम नहीं किया। किसी भी तरह से मैं इसे ठीक कर सकता हूं ताकि यह पहली बार सही तरीके से काम कर सके? मैं नहीं चाहता कि यह समस्या गणना पर हो, जहां गणित त्रुटि को नोटिस करना इतना आसान नहीं है।
वॉरेन- मैंने आपके कोड को आपके द्वारा सुझाए गए अनुसार बदल दिया और आप बिल्कुल सही हैं! मैं भूल गया कि धुरी 3 के साथ अंतिम स्लॉट पहले रन में खाली था लेकिन जब आप कोड को दोबारा नहीं लेते थे।वैसे भी, जो आपने उत्तर के रूप में कहा था उसे पोस्ट करें और मैं इसे स्वीकार करूंगा। :) – ChristineB
ठीक है, उत्तर जोड़ा गया। –