numpy中的stack,vstack与hstack新解

本文详细解析numpy中stack、vstack和hstack函数的使用,特别是它们在数组拼接中的作用。重点阐述了axis参数对拼接结果形状的影响,并通过实例说明vstack沿垂直方向拼接,hstack沿水平方向拼接,帮助读者理解这些函数的基本概念和应用场景。
摘要由CSDN通过智能技术生成

numpy中的stack,vstack与hstack新解

查了一下,发现网上好多人的解释都不对,很多人打算用数组“打包”等过程来解释stack函数操作过程,要么举的例子太简单没有代表性,要么举的例子太复杂,看得人头疼。
其实,没有必要去了解这个函数是怎么操作数组的,按照官方的文档来看,对于这个函数,大家只需要了解两点即可,不必弄得太清楚明白:

  1. 这个函数是用来堆叠数组的;
  2. 这个函数所返回的数组的形状

第一点不必多言,关于第二点,官方文档给出的答案是:
返回的数组比原来的数组多一维。
但关键的问题是,多的那一维是加到了第几维?假设有S个MN的数组进行堆叠,那堆叠之后的数组到底是是SMN,MSN还是MNS呢?其实呢,这就是参数axis的作用。axis=0,那堆叠后的数组形状是SMN,如果axis=1,堆叠后的形状将是MS*N。依此类推。

关于参数axis的解释,官方文档其实有点难懂,但是它说的的确很准确,它可以用如下例子解释:
比如有10个形状为(4,3)的矩阵

arrays = [np.random.randn(3, 4) for _ in range(10)]

调用stack之后,axis=0,则多出一这一维加在第一维,变成一个(10, 3, 4)的矩阵,堆叠几个数组,新增的维度的长度就是几:

np.stack(arrays, axis=0).shape
#(10, 3, 4)

同样的解释:

 np.stack(arrays, axis=1).shape
 #(3, 10, 4)
 np.stack(arrays, axis=2).shape
 #(3, 4, 10)

最后再解释一下为什么没有必要弄清楚数组堆叠的过程:

  • 多维数组,我们更关心它的形状;
  • 理解这个堆叠过程需要的思维与人的思维差异太大,换言之,理解这个过程太烧脑,太费时,无益

vstack与hstack

这两个函数可以看成数组拼接。

vstack沿竖直方向拼接:
vstack(a, b) = \begin{bmatrix}
   a \\
   b
  \end{bmatrix} 

例如:


a = np.array([[1], [2], [3]])
b = np.array([[2], [3], [4]])
np.vstack((a,b))
#array([[1],       [2],       [3],       [2],       [3],       [4]])
hstack沿竖直方向拼接:
hstack(a, b) = \begin{bmatrix}
   a &
   b
  \end{bmatrix} 

例如:


a = np.array([[1], [2], [3]])
b = np.array([[2], [3], [4]])
np.vstack((a,b))
# array([[1, 2],       [2, 3],       [3, 4]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值