numpy之堆叠数组:stack(),hstack(),vstack()

本文介绍了如何使用numpy中的stack(), hstack(), vstack()函数来连接数组。stack()可以在指定的轴上连接数组,而hstack()和vstack()则分别沿水平方向和垂直方向堆叠数组。文章通过实例演示了这些函数的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见的主要有stack(),hstack(),vstack()这三个函数

  1. stack(),按照指定的轴对数组序列进行联结。
    共有三个参数,使用格式为numpy.stack(arrays, axis=0, out=None)
    第一个参数是要连接的数组,数组的大小(shape)需要一致,如下图,a,b可以stack连接但是a,c不行
    如图
    第二个参数是维度,axis=几,就代表以第几维的元素为单位进行叠加,结合下面的实际运行结果来说:
    a,b,c分别是2x3的矩阵,组成的新矩阵为3x2x3,想象成3个二维矩阵[[1,2,3].[4,5,6]]依次叠加在一起axis的操作都是以新矩阵3x2x3的三维矩阵为基础进行的操作。
    axis=0,就是以0这个维度的元素为单位,自成一个单位,d=3x2x3
    axis =1,就是以1这个维度的元素为单位。所以得到e=2x3x3
    axis=2, 就是以2这个维度的元素为单位。所以得到f = 2x3x3
    在这里插入图片描述

  2. hstack()
    语法格式:numpy.hstack(tup)
    参数:
    tup:要叠加的数组序列,除了一维数组的堆叠可以是不同长度外,其它数组堆叠时,除了第二个轴的长度可以不同外,其它轴的长度必须相同。
    a = np.array((1,2,3))
    b = np.array((2,3,4))
    np.hstack((a,b))
    输出:
    array([1, 2, 3, 2, 3, 4])

  3. vstack()
    沿着第一个轴堆叠数组。
    语法格式:numpy.vstack(tup)
    参数:
    tup:ndarrays数组序列,如果是一维数组进行堆叠,则数组长度必须相同;除此之外,其它数组堆叠时,除数组第一个轴的长度可以不同,其它轴长度必须一样。
    a = np.array([1, 2, 3])
    b = np.array([2, 3, 4])
    np.vstack((a,b))
    输出:
    array([[1, 2, 3],
    [2, 3, 4]])

### Numpy 堆叠操作的区别与使用场景 #### 1. `numpy.stack` 函数 `numpy.stack` 是一种通用的堆叠方法,它通过指定轴参数 (`axis`) 将一系列相同形状的数组沿新轴堆叠在一起。这意味着输入数组会被展平或改变其原始结构,而是简单地新增一个维度[^1]。 ```python import numpy as np arrays = [np.array([1, 2, 3]), np.array([4, 5, 6])] result = np.stack(arrays, axis=0) print(result.shape) # 输出 (2, 3),因为新增了一个第0轴 ``` 此函数适用于需要保持原有数据结构变并引入额外维度的情况。 --- #### 2. `numpy.hstack` 函数 `numpy.hstack` 表示水平堆叠(Horizontal Stack),即将多个数组按照列的方向拼接成一个新的数组。对于一维数组来说,它是简单的连接;而对于多维数组,则是在第二轴(即列方向)上扩展。 ```python a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.hstack((a, b)) print(c) # 结果为 [1 2 3 4 5 6] A = np.array([[1], [2]]) B = np.array([[3], [4]]) C = np.hstack((A, B)) print(C) # 结果为 [[1 3], [2 4]] ``` 适合于当希望在同一行内追加更多元素或者将几个窄矩阵合并为宽矩阵时使用。 --- #### 3. `numpy.vstack` 函数 `numpy.vstack` 实现的是垂直堆叠(Vertical Stack)。它的作用类似于把几页纸摞起来形成一本书那样工作——每一页代表原有一个单独的小阵列,最终得到的大阵列为这些小阵列依次排列而成的结果。在一维情况下会自动转置再叠加[^2]。 ```python x = np.array([1, 2, 3]) y = np.array([4, 5, 6]) z = np.vstack((x, y)) print(z) # 输出如下所示: # [[1 2 3] # [4 5 6]] X = np.array([[1], [2]]) Y = np.array([[3], [4]]) Z = np.vstack((X, Y)) print(Z) # 输出如下所示: # [[1] # [2] # [3] # [4]] ``` 通常应用于构建更高维度的数据集或将低纬度特征向量组合到一起构成样本集合的情形下非常有用。 --- #### 4. `numpy.dstack` 函数 最后提到的就是深度堆叠(`Depth Stack`) —— 即 `dstack()` 方法了。该技术允许我们进一步深入探索三维空间中的对象关系,并且能够很好地支持图像处理等领域内的应用需求。具体而言就是沿着第三个维度也就是深度方向堆积各个平面图层。 ```python img_layer_1 = np.zeros((100, 100)) # 创建一张空白灰阶图片作为第一层 img_layer_2 = np.ones((100, 100)) # 另外制作全白的一张同样尺寸的第二层 combined_image = np.dstack((img_layer_1, img_layer_2)) print(combined_image.shape) # 应该显示(100, 100, 2),表示现在有了两层颜色通道信息 ``` 这种类型的堆叠非常适合用来管理RGB彩色照片或者其他涉及体积渲染的任务之中。 --- ### 总结对比表 | **功能名称** | **主要用途** | **适用范围** | |--------------|----------------------------------|---------------------------------------| | `stack` | 新增任意位置的新轴 | 需要显式定义新的维度 | | `hstack` | 水平方向上的串联 | 合并具有相似高度的同宽度子区域 | | `vstack` | 垂直方向上的累加 | 组合具备一致宽度但可能长度各异的部分 | | `dstack` | 深度层面的累积 | 构建三維數據結構 | 以上四种基本操作各有侧重领域,在实际编程过程中应根据具体的业务逻辑选取最合适的工具完成相应的任务目标。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值