在 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)
将 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]])
我有一个数组,例如
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)
将 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]])