numpy中stack的用法直观理解

本文通过实例详细介绍了如何使用NumPy的vstack、hstack及stack函数沿不同轴堆叠矩阵,帮助读者快速掌握这些常用操作。

首先生成一些数,

import numpy as np
a = np.arange(1, 7).reshape((2, 3))
b = np.arange(7, 13).reshape((2, 3))
c = np.arange(13, 19).reshape((2, 3))

print('a = \n', a)
print('b = \n', b)
print('c = \n', c)
即下面的形式


下面分别以不同的形式输出:

1、vstack

s = np.vstack((a, b, c))
print('vstack \n ', s.shape, '\n', s)
在竖直方向上进行堆叠,得到6×3的矩阵

                                   

2、hstack

s = np.hstack((a, b, c))
print('hstack \n ', s.shape, '\n', s)
在水平方向上进行堆叠

                       

3、axis=0

s = np.stack((a, b, c), axis=0)
print('axis = 0 \n ', s.shape, '\n', s)

就是下面的形式

                                                               

具体为3组2×3矩阵

             

4、axis=1

s = np.stack((a, b, c), axis=1)
print('axis = 1 \n ', s.shape, '\n', s)

即将每个矩阵的每一行进行堆叠,放在一个矩阵里(一行对应一个矩阵)就是下图的红色的放一起,绿色的放一起


5、axis=2

s = np.stack((a, b, c), axis=2)
print('axis = 2 \n ', s.shape, '\n', s)
即将每行的进行竖排,放在一个矩阵里(一行对应一个矩阵)


因为对于stack用法容易忘记,查阅官方文档理解又比较繁琐,故做此一目了然


<think>嗯,用户想了解如何在NumPy中合并数组数据的方法和示例。首先,我得回忆一下NumPy中处理数组合并的函数。记得有concatenate、vstack、hstackstack这些函数,可能还有column_stack和row_stack之类的。需要确认每个函数的具体用法和区别。 首先,根据用户提供的引用[^1],里面提到了numpy.concatenate,这是最基本的沿现有轴连接数组的方法。参数包括要连接的数组元组和轴axis。比如,axis=0是默认的纵向连接,axis=1是横向连接。应该先介绍这个函数,然后给出示例代码。比如,合并两个一维数组成二维,或者合并两个二维数组按行或列。 然后,用户可能对更简便的方法感兴趣,比如vstack和hstack,它们分别是垂直和水平堆叠,内部其实调用了concatenate。比如vstack对应axis=0,hstack对应axis=1。这时候需要给出例子,比如将两个一维数组合成二维数组,或者将二维数组上下堆叠。 接下来,stack函数用于沿新轴合并数组,比如将两个一维数组合并成一个二维数组,或者创建一个新的维度。需要说明axis参数的作用,比如axis=0会在最外层创建新维度,axis=1则会在列方向。这里可能需要例子来展示不同的结果差异。 然后,column_stack和row_stack也是有用的函数,特别是column_stack对于一维数组按列合并成二维数组,而row_stack则是按行堆叠。比如两个一维数组用column_stack会变成两列,而用row_stack则是堆叠成两行。 用户可能还关心不同方法之间的区别,比如concatenate和stack的不同之处,是否生成新维度。此外,需要注意数组的维度是否匹配,比如使用hstack时,数组的行数必须相同,否则会报错。这时候可能需要提醒用户注意数组形状的一致性。 在示例部分,应该用简单的例子,比如创建两个数组a和b,然后分别用不同的方法合并,展示结果。同时,可以引用用户提供的引用[^2]和[^3]中提到的shape属性,显示合并后的形状变化,这样用户能更直观理解。 还要考虑用户的实际应用场景,比如数据处理中需要合并多个数据集,或者在机器学习中合并特征矩阵和标签。可能需要提到这些应用场景,让用户知道合并数组的实际用途。 最后,生成相关问题的时候,要围绕合并数组的不同方法、性能比较、高维数组合并以及错误处理等方面提问,帮助用户深入理解。</think>在NumPy中合并数组主要通过以下方法实现,结合具体示例说明: ### 一、基本合并方法 1. **`np.concatenate` 沿现有轴合并** ```python import numpy as np a = np.array([1,2,3]) b = np.array([4,5,6]) # 纵向合并(axis=0) c = np.concatenate([a, b]) # 结果:[1 2 3 4 5 6] # 二维数组横向合并(axis=1) arr1 = np.array([[1,2],[3,4]]) arr2 = np.array([[5,6],[7,8]]) combined = np.concatenate([arr1, arr2], axis=1) # 结果:[[1 2 5 6], [3 4 7 8]] ``` 该方法要求所有数组在非合并轴上的维度一致。 2. **`np.vstack`/`np.hstack` 快捷合并** ```python # 垂直堆叠(等价于axis=0) v_combined = np.vstack([a, b]) # 结果:[[1 2 3], [4 5 6]] # 水平堆叠(等价于axis=1) h_combined = np.hstack([arr1, arr2]) # 结果同前例concatenate ``` ### 二、创建新维度的合并 **`np.stack` 沿新轴合并** ```python # 新增第0轴合并 stacked = np.stack([a, b], axis=0) # 结果形状:(2,3) # [[1 2 3] # [4 5 6]] # 新增第1轴合并 stacked_col = np.stack([a, b], axis=1) # 形状:(3,2) # [[1 4] # [2 5] # [3 6]] ``` ### 三、特殊场景合并 1. **`np.column_stack` 列式合并** ```python # 将一维数组转为列向量合并 cols = np.column_stack([a, b]) # 结果:[[1 4], [2 5], [3 6]] ``` 2. **`np.row_stack` 行扩展** ```python # 等价于vstack rows = np.row_stack([a, b]) ``` ### 四、高维数组合并 ```python # 三维数组合并示例 arr3d_1 = np.ones((2,3,4)) arr3d_2 = np.zeros((2,3,4)) combined_3d = np.concatenate([arr3d_1, arr3d_2], axis=1) # 合并后形状:(2,6,4) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值