import torch
a = torch.arange(6).reshape(2, 3)
b = torch.arange(15).reshape(3, 5)
torch.einsum('ik,kj->ij', [a, b])tensor([[ 25, 28, 31, 34, 37],
[ 70, 82, 94, 106, 118]])
Monday, September 9, 2024
在物理学、机器学习、科学计算等领域,张量的操作是常见而又复杂的。而在张量操作中,有一种优雅的数学简化工具,即爱因斯坦求和约定(Einstein Summation Convention),它极大地减少了公式的复杂性,特别是在高维张量的运算中。
爱因斯坦求和约定是由著名物理学家阿尔伯特·爱因斯坦提出的一种简化公式的符号约定。根据这一约定,当一个表达式中有重复的索引变量时,默认对该索引进行求和运算,而不需要显式地写出求和符号。
例如,两个矩阵 (A) 和 (B) 的乘法可以通过爱因斯坦求和简化。通常,矩阵乘法公式为:
\[ C_{ik} = \sum_{j} A_{ij} B_{jk} \]
在爱因斯坦求和的符号下,重复出现的索引 (j) 表示对其求和,因此公式可以写为:
\[ C_{ik} = A_{ij} B_{jk} \]
我们用torch实现这个例子:
tensor([[ 25, 28, 31, 34, 37],
[ 70, 82, 94, 106, 118]])
爱因斯坦求和的核心优势在于它可以极大地简化复杂的张量运算,特别是在涉及高维度张量时。这种简洁的符号不仅减少了书写和理解的困难,还可以避免出错,因为我们不再需要反复地书写求和符号。
在物理学中,尤其是在广义相对论和量子力学中,张量的运算无处不在,而爱因斯坦求和约定为这些运算提供了极大的便利。
---
title: "爱因斯坦求和"
date: 2024-09-09
description: "Einstein Summation"
image: "https://cdn.jsdelivr.net/gh/Leslie-Lu/WeChatOfficialAccount/img/202409092357183.png"
categories:
- linear algebra
- deep learning
- tensor
format:
html:
shift-heading-level-by: 1
include-in-header:
- text: |
<style type="text/css">
hr.dinkus {
width: 50px;
margin: 2em auto 2em;
border-top: 5px dotted #454545;
}
div.column-margin+hr.dinkus {
margin: 1em auto 2em;
}
</style>
---
在物理学、机器学习、科学计算等领域,张量的操作是常见而又复杂的。而在张量操作中,有一种优雅的数学简化工具,即爱因斯坦求和约定(Einstein Summation Convention),它极大地减少了公式的复杂性,特别是在高维张量的运算中。
## 什么是爱因斯坦求和?
爱因斯坦求和约定是由著名物理学家阿尔伯特·爱因斯坦提出的一种简化公式的符号约定。根据这一约定,当一个表达式中有重复的索引变量时,默认对该索引进行求和运算,而不需要显式地写出求和符号。
例如,两个矩阵 \(A\) 和 \(B\) 的乘法可以通过爱因斯坦求和简化。通常,矩阵乘法公式为:
$$
C_{ik} = \sum_{j} A_{ij} B_{jk}
$$
在爱因斯坦求和的符号下,重复出现的索引 \(j\) 表示对其求和,因此公式可以写为:
$$
C_{ik} = A_{ij} B_{jk}
$$
我们用torch实现这个例子:
```{python}
import torch
a = torch.arange(6).reshape(2, 3)
b = torch.arange(15).reshape(3, 5)
torch.einsum('ik,kj->ij', [a, b])
```
### column sum
```{python}
a = torch.arange(6).reshape(2, 3)
torch.einsum('ij->j', [a])
```
### row sum
```{python}
torch.einsum('ij->i', [a])
```
### sum
```{python}
torch.einsum('ij->', [a])
```
### transpose
```{python}
torch.einsum('ij->ji', [a])
```
### batch matrix multiplication
```{python}
a = torch.randn(3,2,5)
b = torch.randn(3,5,3)
torch.einsum('ijk,ikl->ijl', [a, b])
```
## 为什么爱因斯坦求和如此重要?
爱因斯坦求和的核心优势在于它可以极大地简化复杂的张量运算,特别是在涉及高维度张量时。这种简洁的符号不仅减少了书写和理解的困难,还可以避免出错,因为我们不再需要反复地书写求和符号。
在物理学中,尤其是在广义相对论和量子力学中,张量的运算无处不在,而爱因斯坦求和约定为这些运算提供了极大的便利。