我有两个numpy数组,例如:
a = [[1,2,3],[4,5,6],[7,8,9]]
b = [[11,12,13],[14,15,16],[17,18,19]]
哪个是同一张图片的频道。我想以一种pythonic的方式获取“ connected”通道数组。想要的结果:
c = [[[1,11],[2,12],[3,13]],
[[4,14],[5,15],[6,16]],
[[7,17],[8,18],[9,19]]]
我尝试过的操作: 我创建了一个大小相同的数组,并遍历了两个源数组以连接它们。
for x in range(len(a)):
for y in range(len(a[x])):
c[x][y] = [a[x][y],b[x][y]]
我需要的东西:我很想找到一种更有效,模块化和Pythonic的实现方式。
答案 0 :(得分:4)
您可以在第二个轴上使用np.stack
:
>>> np.stack((a,b),axis=2)
array([[[ 1, 11],
[ 2, 12],
[ 3, 13]],
[[ 4, 14],
[ 5, 15],
[ 6, 16]],
[[ 7, 17],
[ 8, 18],
[ 9, 19]]])
检查与您的c
数组是否相同:
c = np.array([[[1,11],[2,12],[3,13]],
[[4,14],[5,15],[6,16]],
[[7,17],[8,18],[9,19]]])
>>> (c == np.stack((a,b),axis=2)).all()
True
答案 1 :(得分:1)
这是dstack
。您提到这是一张图片,来自文档:
这是将2D阵列(图像)堆叠到单个3D阵列中进行处理的简单方法。
np.dstack((a, b))
array([[[ 1, 11],
[ 2, 12],
[ 3, 13]],
[[ 4, 14],
[ 5, 15],
[ 6, 16]],
[[ 7, 17],
[ 8, 18],
[ 9, 19]]])
要注意的一点是,文档还指出concatenate
和stack
应该是首选,因为它们比较笼统。