np.stack()函数详解 ==>堆叠 【类似于torch.stack()】

目录 

1.来看看axis=0时,它是如何进行堆叠的:(按矩阵进行堆叠)

2.再来看看axis=1的时候:(按行进行堆叠)

3.当axis=2时(按列的的元素进行堆叠,先堆叠三个矩阵的第0个元素0,12,24,先堆叠三个矩阵的第1个元素1,13,25....)


numpy.stack(arrays, axis=0)

axis参数指定新轴在结果尺寸中的索引。例如,如果axis=0,它将是第一个维度,如果axis=-1,它将是最后一个维度。

  • 参数: 数组:array_like的序列每个数组必须具有相同的形状。axis:int,可选输入数组沿其堆叠的结果数组中的轴。
  • 返回: 堆叠:ndarray堆叠数组比输入数组多一个维。

stack为堆叠的意思,这个函数主要有两个参数,

  • 第一个是需要堆叠的多个数组,采用列表的形式输入,例如:np.stack([arrays1,array2,array3],axis=0)。
  • 第二个参数是axis,这个参数表示从哪一个维度进行堆叠以及堆叠的内容,这个维度是相对于堆叠的数组来说的。整个函数的输出为一个新数组。

先定义3个3*4的数组用来进行堆叠,注意进行堆叠的数组形式必须一致,在这里全为3×4:

a=np.array([i for i in range(12)]).reshape(3,4)
b=np.array([i for i in range(12,24)]).reshape(3,4)
c=np.array([i for i in range(24,36)]).reshape(3,4)
 

a= [[ 0  1  2  3]
    [ 4  5  6  7]
    [ 8  9 10 11]]
b= [[12 13 14 15]
    [16 17 18 19]
    [20 21 22 23]]
c= [[24 25 26 27]
    [28 29 30 31]
    [32 33 34 35]]

1.来看看axis=0时,它是如何进行堆叠的:(按矩阵进行堆叠)

new_array=np.stack([a,b,c],axis=0)
print(new_array)
#输出结果为:
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]

 [[24 25 26 27]
  [28 29 30 31]
  [32 33 34 35]]]

现在我来解释一下为何为这个结果。axis为0,表示它堆叠方向为第0维,堆叠的内容为数组第0维的数据。前面说了第0维是相对于堆叠的数组而言的,而这里数组的第0维其实就是整个3×4的数组(其中第1维为行,第2维为某一行中的一个值,这里有一个层层深入的感觉),所以就是以整个3×4的数组为堆叠内容在第0维上进行堆叠,等到的结果就是一个3×3×4的新数组。再通俗一点,就是将a,b,c分别作为堆叠内容进行堆叠得到3×3×4的输出。

2.再来看看axis=1的时候:(按行进行堆叠)

new_array=np.stack([a,b,c],axis=1)
print(new_array)
#输出结果为:
[[[ 0  1  2  3]
  [12 13 14 15]
  [24 25 26 27]]

 [[ 4  5  6  7]
  [16 17 18 19]
  [28 29 30 31]]

 [[ 8  9 10 11]
  [20 21 22 23]
  [32 33 34 35]]]

和刚才的解释一样,axis为1表示堆叠的方向为3×4数组的第1维(行),堆叠内容也为3×4数组的第1维的数据。而3×4的数组的第1维就是它的行,以数组a为例,它的堆叠数据分别是[0 1 2 3],[ 4 5 6 7],[ 8 9 10 11]。所以a,b,c三个数组在第1维上堆叠后的结果就是上面的输出结果。
在这里插入图片描述

3.当axis=2时(按列的的元素进行堆叠,先堆叠三个矩阵的第0个元素0,12,24,先堆叠三个矩阵的第1个元素1,13,25....)

new_array=np.stack([a,b,c],axis=2)
print(new_array)
[[[ 0 12 24]
  [ 1 13 25]
  [ 2 14 26]
  [ 3 15 27]]

 [[ 4 16 28]
  [ 5 17 29]
  [ 6 18 30]
  [ 7 19 31]]

 [[ 8 20 32]
  [ 9 21 33]
  [10 22 34]
  [11 23 35]]]

表示堆叠内容是3×4数组的第二维的数据(数组中某一行的某个值),堆叠方向为第二维(要先补全某一行)。对于数组a,第2维的第一个值为0,b为12,c为24,所这三个值组成堆叠后的新数组的一行,以此类推,最终可以得到下面的输出结果。

原文连接:np.stack()函数详解_冬天的东_的博客-CSDN博客

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pengsen Ma

太谢谢了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值