在python中压缩后出错

时间:2017-06-01 03:36:43

标签: python numpy

我尝试运行以下python代码。

import numpy as np

recarr = np.zeros((2,), dtype=('i4,f4,a10'))

col1 = np.arange(1,3)
col2 = np.arange(4,6, dtype=np.float32)
col3 = ['Man', 'Woman']

tmp = zip(col1, col2, col3)
recarr[:] = tmp

但是我收到以下错误消息。

File "<ipython-input-55-0c1735078108>", line 1, in <module>
recarr[:] = tmp
ValueError: setting an array element with a sequence.
你能帮我解决这个问题吗?谢谢。

1 个答案:

答案 0 :(得分:2)

zip函数返回一个迭代器。要将其正确分配给切片,必须实现迭代器:

>>> recarr[:] = list(tmp)
>>> recarr
array([(1,  4., b'Man'), (2,  5., b'Woman')],
      dtype=[('f0', '<i4'), ('f1', '<f4'), ('f2', 'S10')])

注意,如果您不想将迭代器实现为浪费的中间数据结构,则可以使用np.fromiter

>>> recarr = np.fromiter(tmp, dtype=('i4,f4,a10'), count=2)
>>> recarr
array([(1,  4., b'Man'), (2,  5., b'Woman')],
      dtype=[('f0', '<i4'), ('f1', '<f4'), ('f2', 'S10')])
>>>

注意,我传递了count参数,这是可选的,但是如果你可以提供count参数,它将使这个构造函数更有效率。