一、np.einsum简介
numpy.einsum函数是一个高效且灵活的实现张量转换的工具,它允许将多个数组合并,重组和排列以生产所需的输出数组,同时还提供了对应的字母表示方法。einsum的任务是对张量计算进行优化,同时避免给平凡的张量计算增加复杂性,增加对于平凡的张量计算的支持。
二、应用场景
在科学计算领域,einsum的使用非常广泛,特别是在数学、物理和工程学的计算过程中可以发挥重要的作用,尤其是在处理多个数组的时候einsum几乎是必用的工具。
einsum专门用于张量的计算,比如对数组进行乘法、取和、矩阵乘法、计算内积和外积等。 和其他张量工具相比,einsum的优势在于支持对不同字母进行灵活的指定和重组,同时还可以在计算之前对数组进行各种操作,以适应各种计算需求。
三、常用字母符号的解释
习惯上,einsum使用一种类似于字符串的形式来操作所有的张量计算,根据numpy官方文档中指定的表示方法,它可以覆盖绝大部分的张量计算。
- 省略号(...): 省略了一个或多个完整的索引,等价于所有剩余位置的求和,通常只出现在输入数组的末尾。
- 逗号(,): 连接两个输入数组,通常是在两个数组的末尾分别阐述。
- 大写字母: 大写字母通常用来表示要在输出中产生的结果数组中的一维的批量处理或者张量的性质,多用于向量空间和矩阵的范畴中。
- 小写字母: 小写字母通常用来指定要在输入数组中的某个维度上进行处理。
四、使用示例
import numpy as np a = np.arange(25).reshape(5,5) b = np.ones((5,5)) # 点积 c = np.einsum('ij,ij->',a,b) print(c) # 按列求和 c = np.einsum('ij->j',a) print(c) # 矩阵相乘 c = np.einsum('ij,jk->ik',a,b) print(c)
五、小结
np.einsum作为numpt独有的函数,已经成为科学计算领域中的一种基本算法,同时在机器学习的过程中也发挥了重要的作用。对于numpy用户来说,熟练掌握np.einsum函数的使用是必不可缺的一部分。