#python #types #numpy
#python #типы #numpy
Вопрос:
У меня есть структурированный массив, например:
import numpy as np
orig_type = np.dtype([('Col1', '<u4'), ('Col2', '<i4'), ('Col3', '<f8')])
sa = np.empty(4, dtype=orig_type)
где sa
выглядит как (случайные данные):
array([(11772880L, 14527168, 1.079593371731406e-307),
(14528064L, 21648608, 1.9202565460908188e-302),
(21651072L, 21647712, 1.113579933986867e-305),
(10374784L, 1918987381, 3.4871913811200906e-304)],
dtype=[('Col1', '<u4'), ('Col2', '<i4'), ('Col3', '<f8')])
Теперь, в моей программе, я каким-то образом решаю, что мне нужно изменить тип данных ‘Col2’ на строку. Как я могу изменить dtype
, чтобы сделать это, например, непрограммным способом:
new_type = np.dtype([('Col1', '<u4'), ('Col2', '|S10'), ('Col3', '<f8')])
new_sa = sa.astype(new_type)
где new_sa
теперь выглядит так, и это здорово:
array([(11772880L, '14527168', 1.079593371731406e-307),
(14528064L, '21648608', 1.9202565460908188e-302),
(21651072L, '21647712', 1.113579933986867e-305),
(10374784L, '1918987381', 3.4871913811200906e-304)],
dtype=[('Col1', '<u4'), ('Col2', '|S10'), ('Col3', '<f8')])
Как мне программно изменить orig_type
на new_type
? (не беспокойтесь о длине |S10
). Есть ли «простой» способ, или мне нужен цикл for для создания нового dtype
объекта конструктора?
Ответ №1:
Ярлыка нет. Вы бы просто сконструировали новый dtype так, как вам нравится, и использовали .astype()
.
Ответ №2:
Если ваш вопрос на самом деле направлен на то, как создать новый dtype
объект из старого, это может быть то, что вы ищете:
orig_type = sa.dtype
descr = orig_type.descr
descr[1] = (descr[1][0], "|S10")
new_type = numpy.dtype(descr)