Python中数组堆叠(stack)

Python中数组堆叠(stack)

问题来源:
有一天一个朋友问我这个问题,我也是似懂非懂,就上网查找相关资料,但是看着大家的解答还是有点懵,就去请教了另一位朋友,算是解决了一些心中的疑惑,记录一下。
x1 = np.arange(9).reshape((3,3))
x2 = np.arange(10,19,1).reshape((3,3))

y2 = np.stack((x1,x2),axis=1)

举例说明:
用jupyter
首先创建4个3*3的二维数组:
在这里插入图片描述
从坐标的角度去理解这个问题。
先把原始数组每个元素坐标写出来:

array([[0, 1, 2],		(0,0)(0,1)(0,2)
       [3, 4, 5],		(1,0)(1,1)(1,2)
       [6, 7, 8]])		(2,0)(2,1)(2,2)
array([[10, 11, 12],	(0,0)(0,1)(0,2)
       [13, 14, 15],	(1,0)(1,1)(1,2)
       [16, 17, 18]])	(2,0)(2,1)(2,2)
  1. x1和x2,axis = 0:
    在x1和x2中的x1前面加一个维度,因为是两个数组堆叠,所以堆叠后的数组shpe为(2,3,3),每9个元素一变换,星号里的就是后加的,
    坐标变换:
array([[0, 1, 2],		(*0*,0,0)(*0*,0,1)(*0*,0,2)
       [3, 4, 5],		(*0*,1,0)(*0*,1,1)(*0*,1,2)
       [6, 7, 8]])		(*0*,2,0)(*0*,2,1)(*0*,2,2)
array([[10, 11, 12],	(*1*,0,0)(*1*,0,1)(*1*,0,2)
       [13, 14, 15],	(*1*,1,0)(*1*,1,1)(*1*,1,2)
       [16, 17, 18]])	(*1*,2,0)(*1*,2,1)(*1*,2,2)

在这里插入图片描述

  1. x1和x2,axis = 1:
    在x1和x2中间加一个维度,因为是两个数组堆叠,所以堆叠后的数组shpe为(3,2,3),每6个元素一变换,星号里的就是后加的,
    坐标变换:
array([[0, 1, 2],		(0,*0*,0)(0,*0*,1)(0,*0*,2)
       [3, 4, 5],		(1,*0*,0)(1,*0*,1)(1,*0*,2)
       [6, 7, 8]])		(2,*1*,0)(2,*1*,1)(2,*1*,2)
array([[10, 11, 12],	(0,*1*,0)(0,*1*,1)(0,*1*,2)
       [13, 14, 15],	(1,*2*,0)(1,*2*,1)(1,*2*,2)
       [16, 17, 18]])	(2,*2*,0)(2,*2*,1)(2,*2*,2)

将变换后的元素按坐标填入相对应的位置就是变换后的数组形式,可以对照一下结果和变换后的坐标是不是一样的。
在这里插入图片描述

  1. x1和x2,axis = 2:
    在x1和x2最后面加一个维度,因为是两个数组堆叠,所以堆叠后的数组shpe为(3,3,2),每6个元素一变换,星号里的就是后加的,
    坐标变换:
array([[0, 1, 2],		(0,0,*0*)(0,1,*0*)(0,2,*0*)
       [3, 4, 5],		(1,0,*0*)(1,1,*0*)(1,2,*0*)
       [6, 7, 8]])		(2,0,*1*)(2,1,*1*)(2,2,*1*)
array([[10, 11, 12],	(0,0,*1*)(0,1,*1*)(0,2,*1*)
       [13, 14, 15],	(1,0,*2*)(1,1,*2*)(1,2,*2*)
       [16, 17, 18]])	(2,0,*2*)(2,1,*2*)(2,2,*2*)

在这里插入图片描述

  1. x1、x2和x3,axis = 0:
    在这里插入图片描述

  2. x1、x2和x3,axis = 1:
    在这里插入图片描述

  3. x1、x2和x3,axis = 2:
    在这里插入图片描述

  4. x1、x2、x3和x4,axis = 0:
    在这里插入图片描述

  5. x1、x2、x3和x4,axis = 1:
    在这里插入图片描述

  6. x1、x2、x3和x4,axis = 2:
    在这里插入图片描述
    后面两个可以自己验证一下,就不一一写出来了。如果有不对的地方还请多多批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值