【问题标题】:too many values to unpack in genfromtxt在 genfromtxt 中解压的值太多
【发布时间】:2013-11-20 11:14:53
【问题描述】:

我有一个包含振动数据的 tsv 文件(出于某种愚蠢的原因,用逗号代替了点,因此使用了转换器)。我想从其中两个通道生成 numpy 数组,但得到一个我无法弄清楚的“ValueError:要解压的值太多(预期为 2)”。

在 ipython 中(带有 pylab 选项):

In [171] import re

In [172]: def qdsub(s):
   .....:     return re.sub('\,', '.', str(s)[2:-1])
   .....:

In [173]: x, y = genfromtxt('QD1_short.tsv', delimiter='\t', usecols=(0, 1), 
   .....: unpack=True, skip_header=13, converters={0:qdsub, 1:qdsub}, 
   .....: skip_footer=2, dtype=float)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-177-e17389233ac3> in <module>()
        1 x, y = genfromtxt('QD1_short.tsv', delimiter='\t', usecols=(0, 1), 
        2 unpack=True, skip_header=13, converters={0:qdsub, 1:qdsub},
  ----> 3 skip_footer=2, dtype=float)

ValueError: too many values to unpack (expected 2)

【问题讨论】:

  • 显然我还不能回答我自己的问题,但问题已解决,请参阅用户回答的评论

标签: python numpy genfromtxt


【解决方案1】:

也许这就是问题所在:

x, y = ge...

试试

v = ge...

例子:

>>> a, b = [1,2,3,4]

Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    a, b = [1,2,3,4]
ValueError: too many values to unpack

【讨论】:

  • 好吧,v = genfromtxt(... 肯定会返回一些东西,没有错误,问题是它是一个看似无用的 array([('', ''), ('', ''), ('', ''), ..., 只使用一列,我得到了一个整洁的浮点数组,我想得到其中两个.我以前用 x, y = loadtxt(... 但是这个 tsv 的页脚意味着我不能走那条路
  • 显然,问题出在转换器上。将其修改为return re.sub('\,', '.', str(s)[2:-1]),现在一切正常。不过,之前在单列上还可以,这似乎很奇怪。哦,好吧..
【解决方案2】:

numpy.genfromtxtdocumentation 说:

解压: bool,可选

If True, the returned array is transposed, so that arguments may be unpacked 
using x, y, z = loadtxt(...)

我最好的猜测是你应该尝试将genfromtxt 包裹在loadtxt 中:

from numpy import loadtxt, genfromtxt
(...)

x, y = loadtxt(genfromtxt('QD1_short.tsv', delimiter='\t', usecols=(0, 1), 
                          unpack=True, skip_header=13, converters={0:qdsub, 1:qdsub}, 
                          skip_footer=2, dtype=float))

【讨论】:

    【解决方案3】:

    问题出在转换器上,它显然应该返回一个浮点数

    def qdsub(s):
        return float(re.sub('\,', '.', str(s)[2:-1]))
    

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 2018-12-19
      • 2013-04-25
      • 2018-10-30
      • 2010-12-01
      相关资源
      最近更新 更多