2012-06-21 7 views
5

मैं बराबर आकार के कॉलम के विरुद्ध डेटा की एक बड़ी श्रृंखला (numpy.genfromtxt के माध्यम से) के कई स्तंभों को चित्रित कर रहा हूं। गुम डेटा को अक्सर नैन, -999, -99 99, आदि के रूप में जाना जाता है। हालांकि मैं यह नहीं समझ सकता कि सरणी से कई मान कैसे निकालें। मेरे पास वर्तमान में यह है:एकाधिक दिए गए मानों के साथ पायथन में एक मुखौटा सरणी बनाना

for cur_col in range(start_col, total_col): 
    # Generate what is to be graphed by removing nan values 
    data_mask = (file_data[:, cur_col] != nan_values) 
    y_data = file_data[:, cur_col][data_mask] 
    x_data = file_data[:, time_col][data_mask] 

किस बिंदु के बाद मैं प्रत्येक कॉलम के लिए उचित आंकड़े बनाने के लिए matplotlib का उपयोग करता हूं। यह ठीक काम करता है अगर nan_values ​​एक पूर्णांक है, लेकिन मैं एक सूची का उपयोग करने के लिए देख रहा हूँ।

संपादित करें: यहां एक कामकाजी उदाहरण है।

import numpy as np 

file_data = np.arange(12.0).reshape((4,3)) 
file_data[1,1] = np.nan 
file_data[2,2] = -999 
nan_values = -999 

for cur_col in range(1,3): 
    # Generate what is to be graphed by removing nan values 
    data_mask = (file_data[:, cur_col] != nan_values) 
    y_data = file_data[:, cur_col][data_mask] 
    x_data = file_data[:, 0][data_mask] 
    print 'y: ' + str(y_data) 
    print 'x: ' + str(x_data) 
print file_data 

>>> y: [ 1. nan 7. 10.] 
    x: [ 0. 3. 6. 9.] 
    y: [ 2. 5. 11.] 
    x: [ 0. 3. 9.] 
    [[ 0. 1. 2.] 
    [ 3. nan 5.] 
    [ 6. 7. -999.] 
    [ 9. 10. 11.]] 

यह काम नहीं करेगा अगर nan_values ​​= [ 'नेन', -999] जो कि मैं क्या पूरा करने के लिए देख रहा हूँ है।

+0

पोस्ट करें नमूना सरणी (सूची)। –

+0

@ अश्विनी चौधरी मैंने एक कामकाजी उदाहरण शामिल करने के लिए प्रश्न संपादित किया है। – Josiah

उत्तर

4

मैं बहुत तरह masked arrays उपयोग करने का सुझाव होगा:

>>> a = np.arange(12.0).reshape((4,3)) 
>>> a[1,1] = np.nan 
>>> a[2,2] = -999 
>>> a 
array([[ 0., 1., 2.], 
     [ 3., nan, 5.], 
     [ 6., 7., -999.], 
     [ 9., 10., 11.]]) 
>>> m = np.ma.array(a,mask=(~np.isfinite(a) | (a == -999))) 
>>> m 
masked_array(data = 
[[0.0 1.0 2.0] 
[3.0 -- 5.0] 
[6.0 7.0 --] 
[9.0 10.0 11.0]], 
      mask = 
[[False False False] 
[False True False] 
[False False True] 
[False False False]], 
     fill_value = 1e+20) 
+0

जबकि परिणाम मुझे चाहिए, लेकिन यह ऐसी सूची का उपयोग नहीं करता है जो मैं जो कर रहा हूं उसे काफी सुव्यवस्थित करता हूं। M.array में मास्क = के लिए सूची के साथ या विवरण को बदलने का कोई तरीका है? – Josiah

+2

'mask = np.logical_or.reduce ([a == मान के लिए मूल्य [-99, -999, -9999]])'। हालांकि 'np.nan! = Np.nan' के बारे में जागरूक रहें, इसलिए आपको इसे मुखौटा में स्पष्ट रूप से जोड़ना होगा। – user545424

+0

उत्कृष्ट, बिल्कुल मुझे क्या चाहिए। धन्यवाद। – Josiah

2

मैं (छद्म कोड) की तरह कुछ की कोशिश करेंगे:

nan_values = [...] 

for cur_col in range(start_col, total_col): 
    # Generate what is to be graphed by removing nan values 
    y_data = [file_data[i,cur_col] for i in range(len(file_data)) if not(file_data[i,cur_col] in nan_values)] 
    x_data = [file_data[i,time_col] for i in range(len(file_data)) if not(file_data[i,cur_col] in nan_values)] 
+0

मैं हाल ही में जोड़े गए कामकाजी में इस उदाहरण को लागू करने में सक्षम नहीं हूं। मुझे 'प्रकार का तर्क' int 'इट्रेबल नहीं है' – Josiah

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