2014-10-03 132 views
0

我正在写一个Python脚本,它逐行读取输入文件,每行包含20个值。我试图在第一个数组中存储第一个数据,并在第二个数组中存储另外19个数据。Python将值行分成两个数组

他们被定义为:

x = numpy.zeros((n_lines)) 
y = numpy.zeros((n_lines,19)) 

n_lines在我输入文件中的行数。 和我与

for i,line in enumerate(open(infile)): 
    x[i],y[i] = line.split(' ') 

阅读它但我通过在一个单一的大阵列中存储它,然后将其切割成两个末端遇到Too many values to unpack error

我现在做它。我没有使用line.split(' ')[0],line.split(' ')[1:],因为它看起来没有优化分裂两次。

是否有一种整洁的(Pythonista)解包方式?

(我使用Python 2.7,如果该事项)

回答

2

你做的最后部分权(创建一个数组,然后切片),但第一部分应使用numpy.genfromtxt()来完成,像这样:

big_array = numpy.genfromtxt(infile) ## probably with more arguments 
x, y = numpy.split(big_array, [1]) 

如果需要更有效的解决方案,替代的是:

big_array = numpy.empty((nlines, 20)) 

for i,line in enumerate(open(infile)): 
    big_array[i,:] = line.split() 

x, y = numpy.split(big_array, [1]) 

最后,直接从线拆包到前者xy阵列可以做到这样的:

splitted = line.split(); 
x[i], y[i,:] = splitted[0], splitted[1:] 
+0

这绝对是更快的代码,但在这里解释说:http://stackoverflow.com/questions/24701696/python-and-memory-efficient-way-of-导入-2d数据对于大规模数据导入而言效率低下。 – 2014-10-03 13:59:45

+1

然后你可以创建整个大数组,然后使用'numpy.split()'作为它的显示。这能解决问题吗? – heltonbiker 2014-10-03 14:03:17

+0

我的问题可能不够清楚,我相信你的分裂解决方案可能会比我现在使用的解决方案更好。我很想知道从20到1 + 19解包的正确方法,而不是如何读取文件或拆分数组。顺便谢谢你的意见! – 2014-10-03 14:17:43