【学习笔记】einsum函数

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_i\sum_ja_{ijkl}b_{ijmn} cklmn=ijaijklbijmn 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_i\sum_ja_{ijk}b_{ijl} ckl=ijaijkbijl

c = np.einsum('ijk,jkl->kl', a, b) # einsum
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值