无法将2d数组合并到另一个2d数组(python)

时间:2017-07-10 00:41:58

标签: python arrays python-2.7 numpy multidimensional-array

我有两个清单,

    list_a
    list_b

其形状为[10,50]和[40,50] 我尝试将它们组合成一个[50,50]数组,从以下代码开始(为便于阅读而编辑)

    array_a=np.array(list_a)
    array_b=np.array(list_b)
    array_c=np.concatenate(array_a,array_b)

但它一直给我一个错误,说

" TypeError:只有length-1数组可以转换为Python标量"

这里的问题是什么,我该如何解决?这个错误不是很有用......

2 个答案:

答案 0 :(得分:2)

np.concatenate期望一个元组作为参数,即它应该是

array_c=np.concatenate((array_a,array_b))

第一个参数是任意数量的数组的元组,第二个参数(在您的情况下为array_b)告诉concatenate它应该在哪个轴上运行。

答案 1 :(得分:1)

这里的问题是np.concatenate期望第一个参数的可迭代序列的类数组对象。这里只需要array_a作为第一个参数。它将array_b作为第二个参数,它指定要连接的数组轴。由于此参数需要类似于整数,因此它尝试将array_b转换为整数,但由于它包含多个项目而失败。因此出现此错误消息。

要解决它,你需要将两个数组包装在一个可迭代的元组中,如:元组:

cc=np.concatenate((array_a,array_b))

这导致两个数组作为函数的第一个参数传递。 (编辑:在列表中包装也有效,即concatenate([array_a,array_b])。尚未尝试其他形式。)

在您的示例中,这将起作用,因为第二个参数默认为0,这意味着数组在第一个维度中可以具有不同的长度(第零个索引维度)。对您而言,这些长度为1040,而另一个维度为50。如果你的数组维度相反,那么它们现在是[50,10][50,40],则需要将轴设置为第二维(索引1),如下所示:

cc=np.concatenate((array_a,array_b),1)