2011-07-02 9 views
5
import numpy as np 
import numpy.ma as ma 

"""This operates as expected with one value masked""" 
a = [0., 1., 1.e20, 9.] 
error_value = 1.e20 
b = ma.masked_values(a, error_value) 
print b 

"""This does not, all values are masked """ 
d = [0., 1., 'NA', 9.] 
error_value = 'NA' 
e = ma.masked_values(d, error_value) 
print e 

मैं 'नैन', 'एनए', 'कोई नहीं', या लापता डेटा को इंगित करने के लिए कुछ समान मूल्य का उपयोग कैसे कर सकता हूं?बेवकूफ मास्क किए गए सरणी - गुम मूल्यों का संकेत

उत्तर

4

क्या आप टेक्स्ट डेटा या इसी तरह से अपना डेटा प्राप्त कर रहे हैं? मुझे लगता है कि अपने उदाहरण में समस्या यह है कि अजगर सूची आप numpy सरणी प्रारंभ करने में उपयोग कर रहे हैं विषम प्रकार हैं (है

In [149]: f = StringIO('0.0, 1.0, NA, 9.0') 

In [150]: a = np.genfromtxt(f, delimiter=',', missing_values='NA', usemask=True) 

In [151]: a 
Out[151]: 
masked_array(data = [0.0 1.0 -- 9.0], 
      mask = [False False True False], 
     fill_value = 1e+20) 

: यदि हां, तो मैं सीधे अपने नकाबपोश मूल्य निर्दिष्ट करने के लिए genfromtxt समारोह का उपयोग कर सुझाव देंगे तैरता है और एक स्ट्रिंग)। मूल्यों को एक numpy सरणी में तारों के लिए मजबूर किया जाता है, लेकिन masked_values फ़ंक्शन अजीब परिणामों को उत्पन्न करने वाली फ़्लोटिंग पॉइंट समानता का उपयोग करता है।

In [152]: d = np.array([0., 1., 'NA', 9.], dtype=object) 

In [153]: e = ma.masked_values(d, 'NA') 

In [154]: e 
Out[154]: 
masked_array(data = [0.0 1.0 -- 9.0], 
      mask = [False False True False], 
     fill_value = ?) 

आप के बाद से परिणाम एक नाव dtype है पहला समाधान पसंद कर सकते हैं:

यहाँ एक तरह से वस्तु dtype साथ एक सरणी बनाने के द्वारा इस पर काबू पाने के लिए है।

+0

मैं अपनी सरणी (स्मृति में) में गुम मूल्य जानकारी को संरक्षित करना चाहता हूं। मास्क का उपयोग करने में मेरा उद्देश्य इतना है कि गुम मूल्यों को अनदेखा कर, सरणी औसत हो सकती है। जैसा कि एम डॉक्स में बताया गया है कि एमए का उद्देश्य गायब या अमान्य मूल्यों वाले डेटा की प्रसंस्करण की अनुमति देना है। वास्तविक डेटा श्रृंखला 'एनए', 'कोई नहीं' या समान लापता मूल्यों को चिह्नित करने के लिए उपयोग किया जाता है। क्या "fill_value" विकल्प मेरे उद्देश्य को पूरा करने का कोई तरीका प्रदान करता है? –

+0

@ डिक: हां, उपरोक्त दोनों विधियों को पूरा करने के लिए आपको जो चाहिए वह पूरा करें। वे दोनों जानकारी को संरक्षित करते हैं कि तत्व 3 गुम है (fill_value उतना महत्वपूर्ण नहीं है जितना कि आप जिस पर ध्यान रखते हैं)। उदाहरण के लिए आप 'a.mean()' या 'e.mean()' पर कॉल कर सकते हैं और देख सकते हैं कि परिणाम '3.33' है। गायब मानों के लिए आपकी डेटा श्रृंखला का उपयोग करने वाले किसी भी चरित्र/स्ट्रिंग का उपयोग ऊपर दिए गए उदाहरणों में 'एनए' के ​​बजाय किया जा सकता है। – ars

0

यह समाधान काम करता है, यह सरणी की एक प्रति बनाने के लिए मजबूर करता है।

a_true = (a == 'NA') 

a[a_true] = 1.e20 

a = a.astype(float) 

print a 

error_value = 1.e20 

b = ma.masked_values(a, error_value) 

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