据我了解,tensordot
http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.tensordot.html
是将两个张量相乘并对给定的索引求和。这正是 einsum 所做的。

其实这两个函数有什么区别呢?那是因为性能不同吗?

最佳答案

它们是解决类似问题的不同方法。 einsum 更通用。速度可能相似,但您需要检查个别情况。
tensordot 通过重塑和转置轴来工作,将问题减少到 np.dot 可以解决的问题。它的代码,直到 dot 调用都是 Python,所以你可以自己阅读。
einsum 是“从头开始”构建的,以与物理学中使用的“爱因斯坦符号”配合使用(它是由科学家编写的,以满足他的需要和用法)。文档涵盖了这一点。它是C代码,所以学习起来有点困难。基本上它解析索引字符串,并构建一个 nditer 对象,该对象将迭代输入数组,执行某种类型的乘积计算。如果您只想要索引、对角线等,它可以走捷径。

已经有许多问题询问这些函数中的任何一个,或者建议在答案中使用它们。

在新版本中,还有一个 np.matmul 以不同的方式概括了 dot。它链接到 Python3.5 中新的 @ 运算符。

关于python - numpy中的tensordot和einsum有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37198024/

10-12 18:02