numpy的stack、hstack、vstack、concatenate区别及使用建议

这篇博客介绍了numpy中stack、hstack、vstack和concatenate的区别。stack会在连接时增加维度,而concatenate不会。hstack和vstack与concatenate类似,但只能接收数组作为参数,且可以被concatenate替代。作者建议尽量避免使用hstack和vstack,以减少混淆,推荐使用concatenate作为首选连接方式。

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

numpy的stack、hstack、vstack、concatenate

这几个函数都是对数组进行连接,介绍下区别

函数增加维度指定维度操作数组shape要求
concatenate不增加除了操作维度,其它必须相同
stack增加必须完全相同
hstack不增加不能除了操作维度,其它必须相同
vstack不增加不能除了操作维度,其它必须相同

从上表就可以看出,concatenate和stack的区别就在于会不会增加维度

a = np.arange(12).reshape(2, 6)
b = np.arange(12).reshape(2, 6)
c = np.concatenate([a, b], axis=0)
d = np.stack([a, b], axis=0)

得到结果

In [20]: c                     
Out[20]: 
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11]])
In [21]: d       
Out[21]: 
array([[[ 0,  1,  2,  3,  4,  5],
        [ 6,  7,  8,  9, 10, 11]],

       [[ 0,  1,  2,  3,  4,  5],
        [ 6,  7,  8,  9, 10, 11]]])

看上去好像相同,但是仔细看就会发现区别

In [23]: c.shape                          
Out[23]: (4, 6)
In [24]: d.shape                         
Out[24]: (2, 2, 6)

c没有增加维度,在指定的0维它的size是两个数组的和,d在0维增加了一个维度。

hstack和vstack其实和concatenate更像,它们的输入参数只有数组,不能指定维度,这两个函数可以用concatenate等价实现,如下

np.hstack([a, b]) == np.concatenate([a, b], axis=1)
np.vstack([a, b]) == np.concatenate([a, b], axis=0)

建议

  • 少使用hstack和vstack,它们的使用和stack有较大差异,建议用concatenate代替
  • 需要牢记stack增加维度,concatenate不增加
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值