3

如果我以不同的方式初始化具有相同字段名称和类型的结构数组,会发生以下情况:

>>> 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 错误吗?

numpy 版本:1.8.0

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

4

1 回答 1

3

作为一种解决方法,如果您指定字符串宽度,它会起作用:

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

大概与thisthis有关。如果它不是一个错误,它非常接近......

于 2014-09-10T14:11:37.600 回答