numpy:串联不同的dtype,同时保留每个dtype

时间:2018-11-20 16:25:07

标签: python numpy numpy-ndarray

我有3个要沿轴1连接的数组。它们的dtypes是np.float32,U32和np.float32。 当我这样连接时:

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

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

2 个答案:

答案 0 :(得分:1)

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

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.ares['a']访问。大多数操作(meanmax等)不能对整个数组进行操作。您需要选择一个单独的字段,但是索引和相关操作将在整个数组上起作用。 一旦习惯了结构化数组,结构化数组将是一个非常有用的对象。

答案 1 :(得分:1)

您可以使用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)