np.stack 函数最通俗本质理解

1、先看看官方对这个函数的功能解释:

网址:https://numpy.org/doc/stable/reference/generated/numpy.stack.html?highlight=stack#numpy.stack请添加图片描述
有三个参数,第一个是放入多个用来堆叠列表,第二个参数是指定沿着某个轴(0,1,2…)去堆叠元素,默认值为0,第三个是可选参数输出到某个变量里。
np.stack 要求堆叠的各个列表形状(shape属性)要相同。
看的可能并不是很明白。
这个函数的具体的堆叠细节官方有个没有解释。其实参与堆叠的各个列表会先自适应的增加一个维度,再在指定的0,1,2。。。上去堆叠。

2、下面给个例子解释一下:

在这之前说明下二维列表/数组形状为(3,2)。第0维表示行,值为3即有3行,第1维表示列,值为2即有2列。总的来说二维列表第一个维度都是表示行,第二个维度表示列。在这里经常有个易错点,当一个列表shape形状为(1,3,2 ) 会有人根据2维列表的情况误以为第0维还表示行。其实这种情况下第0维表示通道,值为1有1个通道;第1维才表示行,值为3有3行;第2维表示列,值为2有2列。

#这里a的shape为一维(3,),若进行a,b的堆叠,a会先自动增加一个维度形状变为(1,3)。b也同样。
a = np.array([1, 2, 3])
b = np.array([2, 3, 4])

#则a在进行堆叠前a的shape为(1,3)b也是。axis=0,则在a,b的行上进行堆叠
print(np.stack((a, b), axis=0))#在列上进行堆叠
'''
输出结果:
[[1 2 3]
 [2 3 4]]
 '''
print(np.stack((a, b), axis=1))#在列上进行堆叠
'''
输出结果:
[[1 2]
 [2 3]
 [3 4]] 
 '''
#a,b的shape形状为(3,3)
a = np.array([[1, 2, 3], [1, 2, 3], [1, 2, 3]])
b = np.array([[4, 5, 6], [4, 5, 6], [4, 5, 6]])
#执行stack操作前,a,b的shape自动变成(1,3,3)
#a,b分别可以再0,1,2维度上进行堆叠。对于3维变量,0维可解释通道,1维解释为行,2维解释为列
print(np.stack((a, b), axis=0))#第0维(通道)上堆叠
'''
输出结果:
[[[1 2 3]
  [1 2 3]
  [1 2 3]]
 [[4 5 6]
  [4 5 6]
  [4 5 6]]] 
 '''
 print(np.stack((a, b), axis=1))#第1维(行)上堆叠
'''
输出结果:
[[[1 2 3]
  [4 5 6]]
 [[1 2 3]
  [4 5 6]]
 [[1 2 3]
  [4 5 6]]]
 '''
  print(np.stack((a, b), axis=2))#第2维(列)上堆叠
'''
输出结果:
[[[1 4]
  [2 5]
  [3 6]]

 [[1 4]
  [2 5]
  [3 6]]

 [[1 4]
  [2 5]
  [3 6]]]
 '''
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值