【学习笔记】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

你可能感兴趣的:(学习记录,numpy)