2012-11-09 6 views
5

के साथ निर्दिष्ट कॉलम निर्दिष्ट करें मेरे पास एक बड़ी तालिका है (टेक्स्ट प्रारूप में संख्याएं) जिन्हें मैं numpy.genfromtxt() से लोड करना चाहता हूं। मैं पहले एन कॉलम को अनदेखा करना चाहता हूं, 5 कहें। मुझे तालिका के आकार (पंक्ति या कॉलम की संख्या) पहले से नहीं पता है।numpy.genfromtxt()

मैंने देखा कि genfromtxt() में एक विकल्प skip_header है जो एक निर्दिष्ट संख्या में शीर्षलेख पंक्तियों को छोड़ने की अनुमति देता है, लेकिन ऐसा लगता है कि कॉलम के लिए ऐसा कोई विकल्प नहीं है। usecols विकल्प है लेकिन वहां मुझे उन स्तंभ संख्याओं को निर्दिष्ट करना होगा जिन्हें मैं रखना चाहता हूं, जिन्हें मैं त्यागना चाहता हूं (मुझे यह संख्या पहले से नहीं पता है)।

स्पष्ट रूप से मैं पूरी चीज को लोड कर सकता हूं और फिर पहले n कॉलम फेंक सकता हूं, लेकिन यह सुरुचिपूर्ण नहीं है और स्मृति के मामले में अपर्याप्त है।

इसके अलावा मैं फ़ाइल में चोटी, कॉलम की संख्या पा सकता हूं, और फिर usecols तर्क का निर्माण कर सकता हूं, लेकिन यह बदसूरत है।

इस सुंदरता को हल करने के तरीके पर कोई विचार? क्या कोई छुपा/अनियंत्रित तर्क है जिसका मैं उपयोग कर सकता हूं?

उत्तर

10

न्यूम्पी के नए संस्करणों में, np.genfromtxt एक पुनरावृत्ति तर्क ले सकता है, ताकि आप जेनरेटर में पढ़ रहे फ़ाइल को लपेट सकें जो लाइनों को उत्पन्न करता है, पहले N कॉलम को छोड़ देता है। अपने नंबरों अंतरिक्ष अलग कर रहे हैं, कि खोज के लिए स्तंभों की संख्या है कि कठिन नहीं है numpy के पुराने संस्करणों के लिए की तरह

np.genfromtxt(" ".join(ln.split()[N:]) for ln in f) 
+0

अच्छा, मैं नहीं था यह नहीं पता। – Bitwise

+0

क्या गलत है? पहले Image = np.genfromtxt ("" .join (ln.split() [1:]) पथ में एलएन + अगली (iter (filelist)) के लिए) – Klasik

17

कुछ, पहली पंक्ति में देखना:

import numpy as np 
with open(fname, 'r') as f: 
    num_cols = len(f.readline().split()) 
    f.seek(0) 
    data = np.genfromtxt(f, usecols = range(5,num_cols)) 
print(data) 
+0

7 अपवॉट्स जब तक बेवकूफ सोना बैज, unutbu :) –

+0

woohoo ! मुझे नहीं पता था :) – unutbu

+2

@ लार्समैन मैं इसके लिए अपवर्तित करूंगा;) – Bitwise