torch.stack()按轴叠加原理

1. 问题:

大部分帖子和一些典型的介绍numpy、pytorch的书籍对此部分并没有详细的介绍,仅仅简单地在np.cat()或torch.stack()等中提到当连接轴指定为0,或1时按照某某连接、排列。然而,当连接轴值较大时(如3,4,5),笔者发现,这些函数的输出并不是大多数材料所写的那样。笔者甚至看不出任何规律,为探寻其轴操作的原理,做了如下实验。

2 归纳:

定义两个初始矩阵:
在这里插入图片描述
执行pytorch中的torch.stack([A, B], 2)操作,因为[A, B]可理解为将A,B连接,即
在这里插入图片描述

torch.stack([A, B], 2)的执行结果为:
在这里插入图片描述

R 中的各个元素改写为C 中对应值的索引,可得:
在这里插入图片描述

根据索引的排布规则,可以看出,R是按照轴序为(1,2,0,3)的顺序排列 的。所以,实际上torch.stack()叠加其实是按照改变元素索引的方式排列的,而不是按照什么“行”,“列”排列的。归纳可推出torch.stack()按轴连接、排列的步骤如下:

  1. 首先得到排列轴的顺序。按下图所示,当指定按照m轴为排列轴时,将0轴挪入到对应的索引位置m,其他轴自动补齐。
    在这里插入图片描述

  2. 计算出[A, B]中所有元素的索引坐标,把原始轴序列(0,1,2,3) 调整为排列轴序列(如 (1,2,0,3)),调整各元素的索引。

  3. 根据各元素的索引重新排列矩阵。

3 验证:

定义两个4阶张量:
在这里插入图片描述

[A2, B2]可表达为5阶张量:
在这里插入图片描述

torch.stack([A2, B2], 2)的结果为:
在这里插入图片描述

按照排列准则,C 中的轴排列(0,1,2,3,4)变为(1,2,0,3,4) 即:
在这里插入图片描述

对比:
在这里插入图片描述

验证归纳出的排列原理正确!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值