将具有不同形状的2D阵列组合为3D阵列numpy



我正试图将两个不同大小的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]]]

有人能帮我吗?

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没有太大好处。

正如numpy文档所说,数组的形状必须相同。试试这个:-

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数组,试着用0或其他东西填充a2数组,否则a1和a2的形状不匹配将不会沿着第三维度堆叠它们。

它应该制作哪个最终阵列:-2x4x2(按照a2形状(还是2x6x2(按照a1形状(?因为两者都有不同的形状。

最新更新