好的,所以我有几个 sympy 对象(表达式)的多维 numpy 数组。例如:
A = array([[1.0*cos(z0)**2 + 1.0, 1.0*cos(z0)],
[1.0*cos(z0), 1.00000000000000]], dtype=object)
等等。
我想做的是使用 einsum 将这些数组中的几个相乘,因为我已经从我之前做的数值计算中获得了它的语法。问题是,当我尝试做类似的事情时
einsum('ik,jkim,j', A, B, C)
我收到一个类型错误:
TypeError: invalid data type for einsum
当然,所以在谷歌上的快速搜索显示我 einsum 可能无法做到这一点,但没有理由说明原因。特别是,在这些数组上调用 numpy.dot() 和 numpy.tensordot() 函数就像一个魅力。我可以使用 tensordot 来做我需要的事情,但是当我想到必须用嵌套的 tensordot 调用替换 50 个左右的 Einsten 求和(如上面的那个(其中 indeces 的顺序非常重要))时,我的大脑很痛。更可怕的是不得不调试该代码并寻找那个放错位置的索引交换。
长话短说,有谁知道为什么 tensordot 可以处理对象但 einsum 不能?对解决方法有什么建议吗?如果没有,关于我将如何编写自己的包装器来嵌套 tensordot 调用的任何建议,这有点类似于 einsum 表示法(数字而不是字母很好)?