Python将值行解压缩为两个数组
Posted
技术标签:
【中文标题】Python将值行解压缩为两个数组【英文标题】:Python unpacking line of values into two arrays 【发布时间】:2014-10-03 13:50:32 【问题描述】:我正在编写一个 Python 脚本,逐行读取输入文件,每个文件包含 20 个值。我正在尝试将第一个存储在一维数组中,将其他 19 个存储在第二个数组中。
它们被定义为:
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)
【问题讨论】:
【参考方案1】:你正在做最后一部分(创建一个数组然后对其进行切片),但第一部分应该使用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:]
【讨论】:
编码肯定更快,但正如这里所解释的:***.com/questions/24701696/… inefficient for large scale data import. 然后你可以创建一个整体的大数组,然后在上面使用numpy.split()
,如图所示。这样能解决问题吗?
我的问题可能不够清楚,我相信您的拆分解决方案可能会比我现在使用的更好。我很想知道从 20 解包到 1 + 19 的正确方法,而不是如何读取文件或拆分数组。顺便感谢您的意见!
从 20 解包到 1 + 19 是这样完成的:one, nineteen = twenty[0], twenty[1:]
。所以你可以这样做,我认为:x[i], y[i,:] = splitted[0], splitted[1:]
因为它们分别具有相同的形状。
@Learning-is-a-mess - 3.something 添加了这个功能,one, *nineteen = a
以上是关于Python将值行解压缩为两个数组的主要内容,如果未能解决你的问题,请参考以下文章