Numpy结构化数组:使用字典指定dtype时字符串类型无法识别

3 投票
1 回答
2039 浏览
提问于 2025-04-20 21:16

如果我用不同的方式来初始化一个结构体数组,且这些结构体的字段名称和类型都相同,会发生什么呢?

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

但是用字典来初始化就不行了,问题出在字符串类型上:

>>> 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 个回答

3

作为一种解决方法,如果你指定字符串的宽度,它就能正常工作:

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

这可能和这个问题以及这个问题有关。如果这不是个bug,那也太像了...

撰写回答