Numpy структурированные массивы: строковый тип не понимается при указании dtype с помощью dict

Вот что произойдет, если я по-разному инициализирую массив с одинаковыми именами и типами полей:

>>> 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 (по умолчанию, 10 ноября 2013 г., 19:24:24) [MSC v.1500 64 бит (AMD64)] на win32

1 ответ

В качестве обходного пути, это работает, если указать ширину строки:

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

Наверное, связано с этим и этим. Если это не ошибка, это ужасно близко...

Другие вопросы по тегам