在 Python 中连接两个数组数组

Concatenate two array of arrays in Python

我有一个数组,例如

a = [array([len(20)]),
     array([len(20)])]

b = [array([len(20)]),
     array([len(15)])] 

len(20)指的是数组包含的20个objects/numbers。

然而,当我尝试时,

final_array = np.concatenate((a,b))

我收到错误,

ValueError: all the input arrays must have same number of dimensions 由于数组之一是 len(15) in array b

如何将这两个数组连接在一起?

编辑: 假设我的所有数组都是 len(20)b 内,然后当我连接时我得到 [=19 的形状=] 为 (4,20)。但是对于我的情况,因为有一个数组 len(15),我一开始根本不知道它是否可能。

根据您的描述,您的情况如下:

In [344]: a=[np.arange(5),np.arange(5)]
In [345]: b=[np.arange(5),np.arange(3)]
In [346]: a
Out[346]: [array([0, 1, 2, 3, 4]), array([0, 1, 2, 3, 4])]
In [347]: b
Out[347]: [array([0, 1, 2, 3, 4]), array([0, 1, 2])]
In [348]: np.concatenate((a,a))
Out[348]: 
array([[0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4]])
In [349]: np.concatenate((a,a),axis=1)
Out[349]: 
array([[0, 1, 2, 3, 4, 0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]])

但如果我改用 (a,b),它会抱怨尺寸不相等。

当输入本身是数组时,concatenate 的行为更清晰。这里是数组列表。

np.array 应用于 a 会生成一个 2 行数组。 np.concatenate((a,)) 做同样的事情。

In [352]: np.array(a)
Out[352]: 
array([[0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4]])

但是在 b 上尝试生成一个 object 数组,因为这 2 个元素的大小不相等。这基本上只是 array 包装器中的一个列表。

In [353]: np.array(b)
Out[353]: array([array([0, 1, 2, 3, 4]), array([0, 1, 2])], dtype=object)

ab 连在一起是什么意思?首先弄清楚您希望 b 的数组版本是什么样子。

In [361]: np.concatenate(b)
Out[361]: array([0, 1, 2, 3, 4, 0, 1, 2])

使用 np.pad 确保 b 的所有元素都足够长的示例:

In [370]: b1=[np.pad(i,(0,5-i.shape[0]),mode='constant') for i in b]
In [371]: b1
Out[371]: [array([0, 1, 2, 3, 4]), array([0, 1, 2, 0, 0])]
In [372]: np.array(b1)
Out[372]: 
array([[0, 1, 2, 3, 4],
       [0, 1, 2, 0, 0]])
In [373]: np.concatenate((a,b1))
Out[373]: 
array([[0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 0, 0]])