Как уже отмечалось, вы не можете смешивать типы данных в ndarray, но можете делать это в структурированном или массиве записей . Они похожи в том, что вы можете смешивать типы данных, как определено аргументом dtype=
(он определяет типы данных и имена полей). Массивы записей предоставляют доступ к полям структурированных массивов по атрибуту, а не только по индексу. Вам не нужны циклы for
, когда вы хотите скопировать все содержимое между массивами. Смотрите мой пример ниже (используя ваши данные):
Mymatrix = np.array([["a","b"], ["c","d"]])
Mycol = np.array([0.4, 0.6])
dt=np.dtype([('col0','U1'),('col1','U1'),('col2',float)])
new_recarr = np.empty((2,), dtype=dt)
new_recarr['col0'] = Mymatrix[:,0]
new_recarr['col1'] = Mymatrix[:,1]
new_recarr['col2'] = Mycol[:]
print (new_recarr)
Результирующий вывод выглядит так:
[('a', 'b', 0.4) ('c', 'd', 0.6)]
Оттуда используйте форматированные строки для печати.
Вы также можете скопировать из recarray в ndarray, если вы измените порядок присваивания в моем примере.
Примечание: я обнаружил, что может быть значительное снижение производительности при использовании обработчиков. Смотрите ответ в этой теме:
ndarray быстрее, чем доступ к повторному массиву?