Python将值行分成两个数组
问题描述:
我正在写一个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,如果该事项)
答
你做的最后部分权(创建一个数组,然后切片),但第一部分应使用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])
最后,直接从线拆包到前者x
和y
阵列可以做到这样的:
splitted = line.split();
x[i], y[i,:] = splitted[0], splitted[1:]
这绝对是更快的代码,但在这里解释说:http://stackoverflow.com/questions/24701696/python-and-memory-efficient-way-of-导入-2d数据对于大规模数据导入而言效率低下。 – 2014-10-03 13:59:45
然后你可以创建整个大数组,然后使用'numpy.split()'作为它的显示。这能解决问题吗? – heltonbiker 2014-10-03 14:03:17
我的问题可能不够清楚,我相信你的分裂解决方案可能会比我现在使用的解决方案更好。我很想知道从20到1 + 19解包的正确方法,而不是如何读取文件或拆分数组。顺便谢谢你的意见! – 2014-10-03 14:17:43