Numpy结构化数组:使用dict指定dtype时不理解字符串类型

时间:2014-09-10 13:32:24

标签: python numpy structured-array

如果我以不同的方式初始化具有相同字段名称和类型的struct数组,会发生什么:

>>> a = np.zeros(2, dtype=[('x','int64'),('y','a')])
>>> a
array([(0L, ''), (0L, '')],
 dtype=[('x', '<i8'), ('y', 'S')])

因此使用元组列表初始化可以正常工作。

>>> mdtype = dict(names=['x','y'],formats=['int64','a'])
>>> mdtype
{'names': ['x', 'y'], 'formats': ['int64', 'a']}
>>> a = np.zeros(2,dtype=mdtype)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: data type not understood

因此用dict初始化不会,问题是字符串类型:

>>> mdtype = dict(names=['x','y'],formats=['int64','float64'])
>>> a = np.zeros(2,dtype=mdtype)
>>>

没有问题。有任何想法吗?这是一个Numpy bug吗?

Numpy版本:1.8.0

Python 2.7.6(默认,2013年11月10日,19:24:24)[MSC v.1500 64位(AMD64)]在win32上

1 个答案:

答案 0 :(得分:3)

作为一种解决方法,如果您指定字符串宽度,则它可以工作:

>>> mdtype = dict(names=['x','y'],formats=['int64','a1'])
>>> np.dtype(mdtype)
dtype([('x', '<i8'), ('y', 'S1')])

可能与thisthis有关。如果它不是一个bug,那就非常接近......