numpy append, typeError: неверное продвижение типов - PullRequest
0 голосов
/ 31 марта 2019

Я хочу создать nundy ndarray со смешанными типами данных.Но у меня была проблема с добавлением еще одного ряда к нему.Моя цель состоит в том, чтобы инициализировать k и продолжать добавлять в него строки в будущем.

import numpy as np

k = np.ndarray((0,3), dtype=[('name', str), ('age', int), ('height', float)])
print(f'k datatype: {k.dtype}')
# k datatype: [('name', '<U'), ('age', '<i4'), ('height', '<f8')]
np.append(k, ['matt', 40, 180.5])
# TypeError: invalid type promotion

Если я не указываю дипт при создании k, то ошибки нет, но столбцы в ndarray всеимеют одинаковый тип данных (строка).

Любая помощь приветствуется.Спасибо

1 Ответ

0 голосов
/ 31 марта 2019

Есть две вещи не так с вашим кодом. Во-первых, вы должны указать тип object d для полей, которые вы собираетесь использовать как строки переменной длины.

Во-вторых, numpy трактует lists и tuples по-разному, в соответствии с их концептуальным происхождением. Вам необходимо преобразовать объект, который вы хотите добавить, в эквивалент структуры перед добавлением.

Это будет работать:

import numpy as np

k = np.ndarray((0,3), dtype=[('name', object), ('age', int), ('height', float)])
np.append(k, np.array(('matt', 40, 180.5), dtype=k.dtype))

Выход:

array([('matt', 40, 180.5)],
      dtype=[('name', 'O'), ('age', '<i4'), ('height', '<f8')])
...