在Python中连接两个数组

时间:2015-12-01 16:58:45

标签: python arrays python-2.7 numpy concatenation

我有一个数组数组,例如

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

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

len(20)指的是数组包含的20个对象/数字。

然而,当我尝试时,

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

我收到了错误,

ValueError: all the input arrays must have same number of dimensions 由于其中一个数组len(15)array b

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

编辑:假设我的所有数组都在len(20)b,那么当我连接时,我会得到{{1}的形状成为final_array。但就我而言,由于有一个数组(4,20),我首先不知道它是否可能。

1 个答案:

答案 0 :(得分:2)

根据您的描述,您的案例如下:

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]])