Numpy: объединить разные dtypes, сохранив каждый dtype - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть 3 массива, которые я хочу объединить вдоль оси 1. Их dtypes: np.float32, U32 и np.float32.Когда я объединяю вот так:

np.concatenate((A,B,C), axis=1)

тип результата d 'U32'.Я хочу сохранить типы столбцов A и C. float32. Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Вы можете создать массив с помощью dtype = object.Это позволяет смешивать типы.Вот пример.

integer = [1, 5]
floats =[3., 4.]
mixed  = np.array( [integer, floats], dtype=object)
mixed 
out[4]:
array([[1, 5],
[3.0, 4.0]], dtype=object)
0 голосов
/ 20 ноября 2018

Вы можете сделать это со структурированными массивами (или записать массивы).Если A, B и C определены как

A = zeros(30, dtype=np.float32)
B = zeros(30, dtype=np.int32)
C = zeros(30, dtype=np.float32)

Вы можете создать массив записей с

res = np.rec.fromarrays([A,B,C], names='a,b,c')

A, B и C должны иметь одинаковые значенияформа, но они могут иметь любой тип данных по вашему выбору.Подмассивы (или поля) могут быть доступны с помощью res.a или res['a'].Большинство операций (mean, max и т. Д.) Не могут работать со всем массивом.Вам нужно будет выбрать отдельное поле, но индексирование и связанные операции будут работать со всем массивом.Структурированные массивы - очень полезный объект, когда вы привыкнете работать с ними.

...