我正在尝试将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]]]
有人可以帮我吗?
答案 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中使用非矩形形状数组。现在,根据您要实现的目标,您有一些选择:
使用列表:
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并没有太多好处。