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])

最后,直接从行解包到之前的 xy 数组可以这样完成:

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将值行解压缩为两个数组的主要内容,如果未能解决你的问题,请参考以下文章

Python:将二进制文件解压缩成二维数组并给出长度错误

Python 文件解压缩

如何使用 Ruby 将解压缩的数组转换为单个值?

Python:如何在 for 中解压缩多个值?

Java对象与byte[]数组之间的相互转化,压缩解压缩操作

Java对象与byte[]数组之间的相互转化,压缩解压缩操作