NumPy

2013-11-04 13 views
5

मैं किसी डेटा सेट है कि इस तरह दिखता है लोड करने के लिए कोशिश कर रहा हूँ loadtxt डेटा प्रकार:NumPy

Algeria,73.131000,6406.8166213983,0.1 
Angola,51.093000,5519.1831786593,2 
Argentina,75.901000,15741.0457726686,0.5 
Armenia,74.241000,4748.9285847709,0.1 

आदि अंत में, मैं केवल कॉलम 1 और 2. मैं देश के नाम की जरूरत नहीं होगी की आवश्यकता होगी और अंतिम कॉलम अनिवार्य रूप से, मुझे आयाम nx1 के साथ दो matrices निकालने की जरूरत है। मुझे पता है कि मैं डेटा प्रकार निर्दिष्ट करना होगा:

data=np.loadtxt('file.txt',delimiter=',',dtype=[('f0',str),('f1',float),('f2',float),('f3',float)]) 

हालांकि, इस tuples की एक सूची,

array([('', 73.131, 6406.8166213983, 0.1), 
    ('', 51.093, 5519.1831786593, 2.0),` 
बजाय

array(['',73.131,6406.8166213983,0.1], 
     ['',51.093, 5519.1831786593, 2.0], 

कहाँ गलती है?

+0

Fwiw, अपने उत्पादन, tuples की एक सूची नहीं है, लेकिन एक [संरचित सरणी ] (http://docs.scipy.org/doc/numpy/user/basics.rec.html)। प्रत्येक पंक्ति की शुरुआत में खाली स्ट्रिंग के साथ आपका वांछित आउटपुट एक विकल्प नहीं है क्योंकि इसमें मिश्रित डाइटप्स हैं। केवल पंक्तियों का उपयोग करना (1,2) 'इस समस्या को अप्रासंगिक बनाता है, क्योंकि वे दोनों ही तैरते हैं। – askewchan

उत्तर

1

तुम सिर्फ पहले दो कॉलम चाहते हैं तो आप genfromtxt इस्तेमाल कर सकते हैं:

import numpy as np 
col1 = np.genfromtxt('yourfile.txt',usecols=(1),delimiter=',',dtype=None) 
col2 = np.genfromtxt('yourfile.txt',usecols=(2),delimiter=',',dtype=None) 

या एक साथ दोनों:

np.genfromtxt('yourfile.txt',usecols=(1,2),delimiter=',',dtype=None) 
0

आपकी "गलती" यह है कि आप अपना खुद का प्रकार निर्धारित करते हैं। यदि आप नहीं चाहते हैं कि आपने जिस प्रकार के सेट को सेट किया है (जहां मुझे कोई कारण नहीं दिखता है कि आप इसे क्यों नहीं चाहते हैं), तो आप केवल कॉलम को लोड करने के लिए np.loadtxt() के skiprows और usecols पैरामीटर का उपयोग कर सकते हैं।

आपका परिणाम एक नम्पी सरणी (एन, 2), नहीं (एन, 3) के आकार के साथ होगा जो आपने सोचा था कि आपके पास होगा (जहां एन आपकी पंक्तियों की संख्या है)।

10

NumPy's दस्तावेज़ीकरण की जांच करें।

x, y = np.loadtxt(c, delimiter=',', usecols=(1, 2), unpack=True) 

usecols पैरामीटर अपना काम पूरा करना चाहिए।

+0

यह सबसे अच्छा जवाब है, लेकिन ओपी के अनुरोध से मेल खाने के लिए 'usecols = (1, 2) 'के साथ। – askewchan

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