我有一个数组数组,例如
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)
,我首先不知道它是否可能。
答案 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)
将a
和b
加在一起是什么意思?首先找出你想要的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]])