我正试图将两个不同大小的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中不能有非矩形数组。现在你有一些选择,这取决于你试图实现的目标:
-
使用列表:
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]]]]
-
使用阵列列表:
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]]])]
-
使用列表数组:
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形状(?因为两者都有不同的形状。