连接两个NumPy数组通道

3

我有两个numpy数组,例如:

a = [[1,2,3],[4,5,6],[7,8,9]]
b = [[11,12,13],[14,15,16],[17,18,19]]

这些是同一图像的通道。我希望以尽可能Pythonic的方式获取“连接”的通道数组。期望结果:

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]]

我希望能找到一种更高效、模块化和符合Python风格的实现方式。

在最后一段代码中,你如何初始化 c - Mad Physicist
2个回答

5
你可以在第二个轴上使用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
这是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]]])

小提示,文档还指出应优先使用concatenatestack,因为它们更通用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接