einsum全称Einstein summation convention(爱因斯坦求和约定),又称为爱因斯坦标记法。einsum的写法省去了求和符号,显得更加简洁。
| 常规 | einsum |
|---|---|
| c = ∑ i a i b i c=sum_ia_ib_i c=∑iaibi | c = a i b i c=a_ib_i c=aibi |
| c j = ∑ j A i j b j c_j=sum_jA_{ij}b_j cj=∑jAijbj | c j = A i j b j c_j=A_{ij}b_j cj=Aijbj |
| c k l m n = ∑ i ∑ j a i j k l b i j m n c_{klmn}=sum_isum_ja_{ijkl}b_{ijmn} cklmn=∑i∑jaijklbijmn | a i j k l b i j m n a_{ijkl}b_{ijmn} aijklbijmn |
函数使用
多维张量求和
实现 c j k = ∑ i a i j k c_{jk}=sum_ia_{ijk} cjk=∑iaijk
c = a.sum(axis=0) # 常规
c = np.einsum('ijk->jk', a) # einsum
更高维向量的求和,实现 c ∗ = ∑ i a i ∗ c_{*}=sum_ia_{i*} c∗=∑iai∗,可以直接将剩下的维度替换成省略号。
c = np.einsum('i...->...', a) # einsum
矩阵乘法
实现 c i k = ∑ j a i j b j k c_{ik}=sum_ja_{ij}b_{jk} cik=∑jaijbjk
c = np.dot(a, b) # 常规
c = np.einsum('ij,jk->ik', a, b) # einsum
更高维张量的乘法,实现 c k l = ∑ i ∑ j a i j k b i j l c_{kl}=sum_isum_ja_{ijk}b_{ijl} ckl=∑i∑jaijkbijl
c = np.einsum('ijk,jkl->kl', a, b) # einsum
最后
以上就是顺利篮球最近收集整理的关于【学习笔记】einsum函数的全部内容,更多相关【学习笔记】einsum函数内容请搜索靠谱客的其他文章。
发表评论 取消回复