一、什么是爱因斯坦求和?
爱因斯坦求和(Einstein summation convention)是由物理学家阿尔伯特·爱因斯坦提出的一种简化张量运算的符号表示法。其核心思想是省略求和符号,通过指标的重复来隐式表示求和操作,从而大幅简化多维度张量(向量、矩阵、高维数组等)的运算表达式。
在传统数学表示中,向量点积需要写成 ∑iaibi\sum_{i} a_i b_i∑iaibi,而使用爱因斯坦求和可简化为 aibia_i b_iaibi(重复的指标 iii 自动表示求和)。这种简洁性在处理高维张量运算时尤为重要。
二、爱因斯坦求和的核心规则
- 重复指标即求和:当一个指标在表达式中出现两次时,自动对该指标进行求和(省略 ∑\sum∑ 符号)
- 自由指标即结果维度:未重复的指标(自由指标)将成为结果张量的维度
- 指标命名无关性:指标名称仅起占位作用,只要遵循规则,使用 i,j,ki,j,ki,j,k 或 x,y,zx,y,zx,y,z 效果相同
- 指标只能重复一次:同一指标最多重复一次(即最多出现两次),出现次数超过两次为无效表达式
- 无箭头符号的处理:当表达式中没有
->符号时,结果的指标是按照->符号+字母顺序(按照字母表a、b、c······)。例如'ik,kj'等价于'ik,kj->ij';'jk,ki'等价于'ik,kj->ij'。
三、常见运算示例(附PyTorch代码)
1. 向量点积(Dot Product)
- 爱因斯坦表达式:
'i,i->'或'i,i' - 数学公式:a⋅b=aibia \cdot b = a_i b_ia⋅b=aibi(隐含 ∑i\sum_{i}∑i 求和)
- 含义:两个向量对应元素相乘后求和,结果为标量
import torch
# 定义两个向量
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
# 爱因斯坦求和实现点积
result = torch.einsum('i,i->', a, b) # 或使用 'i,i'
print(result) # 输出: tensor(32) (1*4 + 2*5 + 3*6 = 4+10+18=32)
2. 向量外积(Outer Product)
- 爱因斯坦表达式:
'i,j->ij'或'i,j' - 数学公式:Cij=aibjC_{ij} = a_i b_jCij=aibj(无重复指标,不求和)
- 含义:生成一个矩阵,其中 Cij=ai×bjC_{ij} = a_i \times b_jCij=ai×bj
# 定义两个向量
a = torch.tensor([1, 2])
b = torch.tensor([3, 4, 5])
# 爱因斯坦求和实现外积
result = torch.einsum('i,j->ij', a, b) # 或使用 'i,j'
print(result)
# 输出:
# tensor([[ 3, 4, 5],
# [ 6, 8, 10]])
3. 矩阵转置(Transpose)
- 爱因斯坦表达式:
'ij->ji' - 数学公式:Bji=AijB_{ji} = A_{ij}Bji=Aij<

最低0.47元/天 解锁文章
3346

被折叠的 条评论
为什么被折叠?



