Numpy:连接不同的数据类型,同时保留每个数据类型

Numpy: concatenate different dtypes whilst preserving each dtype

我有 3 个数组,我想沿着轴 1 连接它们。它们的数据类型是 np.float32、U32 和 np.float32。 当我这样连接时:

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

结果的 dtype 是 'U32'。我想保留 A 列和 C 列的 float32 dtypes。我该怎么做?

您可以使用结构化数组(或记录数组)执行此操作。 如果 ABC 定义为

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

您可以使用

创建一个记录数组
res = np.rec.fromarrays([A,B,C], names='a,b,c')

A、B 和 C 必须具有相同的形状,但它们可以具有您选择的任何数据类型。可以使用 res.ares['a'] 访问子数组(或字段)。大多数操作(meanmax 等)不能对整个数组进行操作。您需要 select 一个单独的字段,但索引和相关操作将适用于整个数组。 一旦习惯了使用结构化数组,它们就是一个非常有用的对象。

您可以使用 dtype=object 创建一个 numpy 数组。它允许您混合类型。这是一个例子。

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)