In [125]: a = [[1, 2, 3, 4]]
...: b = [[1, 2, 3, 4], [1, 2, 3, 4]]
...: c = [[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]
你想要的结果数组:
In [126]: res = np.zeros((2,4,3), int)
现在让我们赋值:
要将 (1,4) a 分配给我们必须使用的数组:
In [128]: res[[0],:,0] = a
和b:
In [129]: res[:,:,0] = b
但是我认为这会覆盖部分或全部a
和c:
In [131]: res[[1],:3,:] = c
结果:
In [132]: res
Out[132]:
array([[[1, 0, 0],
[2, 0, 0],
[3, 0, 0],
[4, 0, 0]],
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[4, 0, 0]]])
我可以在第二层看到c 块。在第一个平面上我看到a,或者它是b 的第一“行”。在第二个平面上,我看到了b 的一部分,但其余部分已被c 覆盖。
这里有一个更好的安装块的方法:
In [141]: res = np.zeros((2,4,3), int)
In [142]: res[[1],:3,:] = c
In [143]: res[[0],:,0] = np.array(a)*10
In [144]: res[0,:,1:] = np.array(b).T*100
In [145]: res
Out[145]:
array([[[ 10, 100, 100],
[ 20, 200, 200],
[ 30, 300, 300],
[ 40, 400, 400]],
[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[ 0, 0, 0]]])
但通常当我们连接数组时,我们会在其“自己的”维度上放置一个新数组,
例如从 3 个平面开始,3 个输入各一个:
In [146]: res = np.zeros((3,3,4), int)
In [147]: res[0,0,:] = np.array(a)*10
In [148]: res[1,:2,:] = np.array(b)*100
In [149]: res[[2],:3,:3] = np.array(c)
In [150]: res
Out[150]:
array([[[ 10, 20, 30, 40],
[ 0, 0, 0, 0],
[ 0, 0, 0, 0]],
[[100, 200, 300, 400],
[100, 200, 300, 400],
[ 0, 0, 0, 0]],
[[ 1, 2, 3, 0],
[ 4, 5, 6, 0],
[ 7, 8, 9, 0]]])
正如最初评论的那样,对于这种混合形状,没有一个单一的、明显的布局。