numpy中的hstack,vstack和dstack

最近看python代码老是看到np.hstack, np.vstack以及np.dstack等,今天简要总结一下我自己的一个理解。这三个stack的变化分别可以称为水平stack(hstack), 垂直stack(vstack)和深度stack(dstack),前两个在二维数组中很好理解,但在三维情况不太好理解。

1. 二维数组

示例代码:

>>> a = np.arange(1,10)
>>> a = a.reshape(3,3)
>>> b = np.arange(10,19)
>>> b = b.reshape(3,3)
>>> np.hstack((a,b))
array([[ 1,  2,  3, 10, 11, 12],
       [ 4,  5,  6, 13, 14, 15],
       [ 7,  8,  9, 16, 17, 18]])
>>> np.vstack((a,b,c))
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12],
       [13, 14, 15],
       [16, 17, 18]])
>>> np.dstack((a,b,c))
array([[[ 1, 10],
        [ 2, 11],
        [ 3, 12]],

       [[ 4, 13],
        [ 5, 14],
        [ 6, 15]],

       [[ 7, 16],
        [ 8, 17],
        [ 9, 18]]])

在这里插入图片描述

2. 三维数组

>>> a = np.arange(1,28)
>>> a = a.reshape(3,3,3)
>>> b = np.arange(28,55)
>>> b = b.reshape(3,3,3)

>>> np.hstack((a,b))
array([[[ 1,  2,  3],
        [ 4,  5,  6],
        [ 7,  8,  9],
        [28, 29, 30],
        [31, 32, 33],
        [34, 35, 36]],

       [[10, 11, 12],
        [13, 14, 15],
        [16, 17, 18],
        [37, 38, 39],
        [40, 41, 42],
        [43, 44, 45]],

       [[19, 20, 21],
        [22, 23, 24],
        [25, 26, 27],
        [46, 47, 48],
        [49, 50, 51],
        [52, 53, 54]]])

>>> np.vstack((a,b))
array([[[ 1,  2,  3],
        [ 4,  5,  6],
        [ 7,  8,  9]],

       [[10, 11, 12],
        [13, 14, 15],
        [16, 17, 18]],

       [[19, 20, 21],
        [22, 23, 24],
        [25, 26, 27]],

       [[28, 29, 30],
        [31, 32, 33],
        [34, 35, 36]],

       [[37, 38, 39],
        [40, 41, 42],
        [43, 44, 45]],

       [[46, 47, 48],
        [49, 50, 51],
        [52, 53, 54]]])

>>> np.dstack((a,b))
array([[[ 1,  2,  3, 28, 29, 30],
        [ 4,  5,  6, 31, 32, 33],
        [ 7,  8,  9, 34, 35, 36]],

       [[10, 11, 12, 37, 38, 39],
        [13, 14, 15, 40, 41, 42],
        [16, 17, 18, 43, 44, 45]],

       [[19, 20, 21, 46, 47, 48],
        [22, 23, 24, 49, 50, 51],
        [25, 26, 27, 52, 53, 54]]])

在这里插入图片描述

结论:其实用水平,垂直和深度在二维数组中很直观,但用来标记三维数组的堆叠则非常容易迷惑,因此vstack记为在第0维度扩展,hstack记为在第一维度扩展,dstack记为在第2维度扩展即可。如果将三维数组当成图像,那么,hstack表示两张图像水平拼接,vstack将两张图像垂直拼接,dstack将图像的通道叠加。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Researcher-Du

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值