2011-08-27 9 views
6

मैं समझता हूं कि मास्क किए गए सरणी को कैसे बनाया जाए, और मैं एक रिकॉर्ड सरणी में मास्किंग का उपयोग करना चाहता हूं ताकि मैं नामित विशेषताओं का उपयोग करके इस डेटा तक पहुंच सकूं। मास्किंग के लिए जब मैं एक नकाबपोश सरणी से एक रिकार्ड सारिणी निर्मित "खो" किया जा रहा है:मैं नम्पी में रिकॉर्ड सरणी के तत्वों को कैसे मुखौटा कर सकता हूं?

>>> data = np.ma.array(np.ma.zeros(30, dtype=[('date', '|O4'), ('price', '<f8')]),mask=[i<10 for i in range(30)]) 
>>> data 
masked_array(data = [(--, --) (--, --) (--, --) (--, --) (--, --) (--, --) (--, --) (--, --) 
(--, --) (--, --) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) 
(0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0) (0, 0.0)], 
     mask = [(True, True) (True, True) (True, True) (True, True) (True, True) 
(True, True) (True, True) (True, True) (True, True) (True, True) 
(False, False) (False, False) (False, False) (False, False) (False, False) 
(False, False) (False, False) (False, False) (False, False) (False, False) 
(False, False) (False, False) (False, False) (False, False) (False, False) 
(False, False) (False, False) (False, False) (False, False) (False, False)], 
    fill_value = ('?', 1e+20), 
     dtype = [('date', '|O4'), ('price', '<f8')]) 

>>> r = data.view(np.recarray) 
>>> r 
rec.array([(0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), 
      (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), 
      (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), 
      (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), 
      (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0), (0, 0.0)], 
      dtype=[('date', '|O4'), ('price', '<f8')]) 

जब मैं एक रिकॉर्ड डेटा नकाबपोश नहीं है का उपयोग:

>>> r.date[0] 
0 

मूल सरणी में विपरीत:

>>> data['date'][0] 
masked_array(data = --, 
      mask = True, 
     fill_value = 1e+20) 

     fill_value = 1e+20) 

मैं क्या कर सकता हूं? क्या रिकॉर्ड सरणी मास्किंग का समर्थन नहीं करती है? वेब पर ब्राउजिंग मैंने कुछ कोड उदाहरण देखे हैं जो अन्यथा सुझाव देते हैं, लेकिन यह बहुत स्पष्ट नहीं था। उम्मीद है कि मैं यहां एक अच्छा जवाब प्राप्त कर सकता हूं।

उत्तर

3

मुझे numpy.ma.mrecords.maskedRecords पर अधिक दस्तावेज नहीं मिला है, संक्षिप्त उल्लेख here के अलावा। आप कुछ उदाहरण देख सकते हैं कि यूनिट परीक्षणों का अध्ययन करके इसका उपयोग कैसे किया जाए। (उदाहरण के लिए /usr/lib/python2.6/dist-packages/numpy/ma/tests/test_mrecords.py)।

import numpy as np 
import numpy.ma.mrecords as mrecords 

data = np.ma.array(
    np.ma.zeros(30, dtype=[('date', '|O4'), ('price', '<f8')]), 
    mask=[i<10 for i in range(30)]) 

r = data.view(mrecords.mrecarray) 

print(r.date[0]) 
# -- 
+0

धन्यवाद, मुझे numpy.ma.mrecords के बारे में पता नहीं था। –

+0

मुझे नहीं लगता कि अलग-अलग क्षेत्रों को मुखौटा करने का कोई तरीका है? मेरा उपयोग मामला "100-दिन-उच्च" (या कुछ समान) नामक एक नया व्युत्पन्न क्षेत्र जोड़ना है, इसलिए मैं पहले 100 रिकॉर्ड के लिए इस क्षेत्र को मुखौटा करना चाहता हूं। –

+0

@Nate रीड: मुझे लगता है कि यह संभव है। क्या आपने 'data.mask ['price'] [डेटा ['date'] <...] = True' जैसी कुछ कोशिश की है? – unutbu

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

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