将具有不同形状的2D数组组合成3D数组numpy

时间:2020-07-22 04:22:39

标签: python arrays numpy

我正在尝试将2个大小不同的2D数组组合成3D数组,如下所示:

a1 = np.array([[0,0,0,0,0,0],[1,1,1,1,1,1]])
print(a1.shape) #(2,6)

a2 = np.array([[0,0,0,0],[1,1,1,1]])
print(a2.shape) #(2,4)

combined = np.stack((a1,a2)) #ValueError: all input arrays must have the same shape 

我正在尝试获得以下信息:

>>> [[[0,0,0,0,0,0],[1,1,1,1,1,1]],[[0,0,0,0],[1,1,1,1]]]

有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

正如numpy docs所言,数组必须具有相同的形状。试试这个:-

a1 = np.array([[0,0,0,0,0,0],[1,1,1,1,1,1]])
print(a1.shape) #(2,6)

# notice extra 2's and 3's to make it of same shape as a1
a2 = np.array([[0,0,0,0,2,2],[1,1,1,1,3,3]]) 
print(a2.shape) #(2,4)

combined = np.stack((a1,a2))

要获取此信息:-

[[[0,0,0,0,0,0],[1,1,1,1,1,1]],[[0,0,0,0],[1,1,1,1]]]

您可以尝试使用python列表。 而且,如果要坚持使用numpy数组,请尝试将a2数组填充为0或其他值,否则a1和a2的形状不匹配将不会沿第三个维度堆叠它们。

哪个最终数组应为:-2x4x2(按照a2形状)或2x6x2(按照a1形状)? 由于两者的形状不同。

答案 1 :(得分:0)

您不能在numpy中使用非矩形形状数组。现在,根据您要实现的目标,您有一些选择:

  1. 使用列表:

    combined = [a1.tolist(), a2.tolist()]
    #[[[[0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1]]], [[[0, 0, 0, 0], [1, 1, 1, 1]]]]
    
  2. 使用数组列表:

    combined = [a1, a2]
    #[array([[[0, 0, 0, 0, 0, 0],[1, 1, 1, 1, 1, 1]]]), array([[[0, 0, 0, 0],[1, 1, 1, 1]]])]
    
  3. 使用列表数组:

    combined = np.array([a1.tolist(), a2.tolist()])
    #[[[list([0, 0, 0, 0, 0, 0]) list([1, 1, 1, 1, 1, 1])]], [[list([0, 0, 0, 0]) list([1, 1, 1, 1])]]]
    

我建议使用列表,因为当元素是列表之类的对象时,使用numpy并没有太多好处。