【Pytorch】科研代码技巧—Einsum爱因斯坦求和约定

本文深入浅出地介绍了PyTorch中的einsum函数,通过具体实例解析了该函数如何简化复杂的矩阵运算,如转置、内积、外积及多维相乘等,并提供了清晰的可视化帮助理解。

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

不知大家在看论文代码的时候是否会常常看见 torch.einsum(),这玩意儿看起来是真的抽象,但是深入了解后发现它原来这么好用

一、Introeduction 

einsum真名叫做爱因斯坦求和约定,用于简洁的表示转置、内积、外积、各种求和

先看看以下这个例子,有这样的一段代码

R=torch.einsum('ik,jk->ij',A,B)

 在Einsum中,箭头从左边到右边消失了什么参数,那公式前就加一个带什么参数的求和符。本案例中消失了k,因此我们需要在加上对带k的求和符,转化为数学公式如下

对数学敏感的小伙伴可能已经知道这个公式代表什么意思了。为了更好展示出来,便将其可视化

画完图之后我们可以直观的知道这就是将两个矩阵每行向量进行求内积

此外,它的底层代码就是套了很多层的for循环,如果我们不用Einsum来实现以上的功能估计要写半天了

二、Skill

是不是感觉上面的公式很简单神奇,是的Einsum诞生的初衷就是为了简化矩阵的运算,因此博主记录了以下几个常用的矩阵运算用Einsum来实现。假设有以下四个矩阵

 2.1 求某行、列、维度之和

# 行之和
R=torch.einsum('ij->i',A)

# 列之和
R=torch.einsum('ij->j',A)

# 某维度之和
R=torch.einsum('ijklmn->n',D)

2.2 所有元素之和

# 所有元素之和
R=torch.einsum('ijklmn->',D)

2.3 转置

# 转置
R=torch.einsum('ij->ji',A)

2.4 内积

# 内积
R=torch.einsum('ij,jk->ik',A,B)

2.5 外积

# 外积
R=torch.einsum('ij,ik->jk',A,C)

2.6 灵活相乘 

# 多维相乘
R=torch.einsum('ij,jk,lj->jk',A,B,C)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

北村南

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值