einsum的本质理解

einsum是numpy和pytorch中一个计算快速灵活的矩阵操作函数,看了网上很多文章解释这个操作,都没有阐述到它的本质,那么多种情况总不能都背记下来吧,终于今天看到一个本质解释,记录下来以后备用。原文地址(似乎也不是原创):
https://www.jianshu.com/p/27350d110caf
本质就是下面这个图,einsum操作符就是下面这个嵌套循环的关键参数的简记:
在这里插入图片描述
具体解释:
(1)einsum操作符的’ -> ‘左边是输入,右边是输出。输入可以1到N个,用’ , ‘分隔各个输入变量,输出只能一个。每个变量的字母表示对应的维度。字母数量必须和维度数量一致,否则报错。
(2)首先根据输出维度决定最外面的for循环的嵌套,比如上面输出C有两个维度i,j,就是两层循环嵌套。
(3)然后在输出侧消失的维度标记字母则表示发生了相加聚合,因此需要在里层循环。
(4)循环的最底层则是对应输入变量的对应元素的相乘,如上面的A[i,k] * B[k,j]
(5)还需要补充说的就是’ -> ‘省略时表示:输出矩阵时按照所有输入的字母去掉重复字母后按字母表顺序排列。比如’ik,kj’表示的是’ik,kj -> ij’。可见这个操作符真是把字符压缩到了极致,能省则省,其他我认为没有必要为了省这几个字符加大了理解难度。

上述解释可以帮助我们理解任何einsum操作符,但是具体应用时我们更需要掌握构造符合要求的操作符,我认为可按如下步骤构造:
(1)首先把输出变量的维度写到’->'右边,
(2)然后观察输入变量的哪些维度发生了相加聚合,发生相加聚合的轴要用输出没有的字母表示
(3)然后观察哪些输入变量间的维度轴需要同步操作,通常是具有同样物理含义的轴,它们用同一个字母表示,
(4)最后再核验一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PyTorch中的`torch.einsum`函数是一个用于执行张量运算的强大工具。它可以根据指定的公式对输入张量进行操作,并生成输出张量。 引用\[1\]中提供了一些常见的用法示例。例如,可以使用`torch.einsum`计算矩阵的行和、列和以及某个维度的和。例如,可以使用`torch.einsum('ij->i', A)`计算矩阵A的行和,使用`torch.einsum('ij->j', A)`计算矩阵A的列和,使用`torch.einsum('ijklmn->n', D)`计算张量D在某个维度上的和。 引用\[2\]中提供了一些更复杂的用法示例。例如,可以使用`torch.einsum('ij,jk->ik', A, B)`计算矩阵A和B的内积,使用`torch.einsum('ij,ik->jk', A, C)`计算矩阵A和C的外积,使用`torch.einsum('ij,jk,lj->jk', A, B, C)`进行多维张量相乘。 引用\[3\]中提供了一个高阶张量运算的示例。在这个示例中,使用`np.einsum('ijk,jil->kl', a, b)`计算了两个3阶张量a和b的乘积,并生成了一个2阶张量o。这个示例中的公式解析为对i和j进行求和,然后将结果存储在输出张量的k和l位置上。 总之,`torch.einsum`是一个非常灵活和强大的函数,可以用于执行各种张量运算。它可以根据指定的公式对输入张量进行操作,并生成输出张量。 #### 引用[.reference_title] - *1* *2* [【Pytorch写代码技巧--EinsumEinsum详解+常用写法](https://blog.csdn.net/ccaoshangfei/article/details/126995397)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Pytorch中, torch.einsum详解。](https://blog.csdn.net/a2806005024/article/details/96462827)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值