小编vls*_*lsd的帖子

如何让numpy.einsum与sympy一起玩?

好的,所以我有几个多维的numpy数组的sympy对象(表达式).例如:

A = array([[1.0*cos(z0)**2 + 1.0, 1.0*cos(z0)],
          [1.0*cos(z0), 1.00000000000000]], dtype=object)
Run Code Online (Sandbox Code Playgroud)

等等.

我想要做的是使用einsum将这些数组中的几个相乘,因为我已经通过我之前做过的数值计算得到了它的语法.问题是,当我尝试做类似的事情时

einsum('ik,jkim,j', A, B, C)
Run Code Online (Sandbox Code Playgroud)

我收到类型错误:

TypeError: invalid data type for einsum
Run Code Online (Sandbox Code Playgroud)

当然,所以在谷歌上快速搜索显示我可能无法做到这一点,但没有理由为什么.特别是,在这些数组上调用numpy.dot()和numpy.tensordot()函数就像一个魅力.我可以使用tensordot来做我需要的事情,但是当我考虑用嵌套的tensordot调用替换上面的那些(如下的顺序非常重要)的50个左右的Einsten总结时,我的大脑会受到伤害.更糟糕的是,虽然必须调试该代码并寻找那个错位的索引交换.

长话短说,有谁知道为什么tensordot与物体一起工作但是einsum不会?有关解决方法的任何建议吗?如果没有,关于我如何编写自己的包装器到嵌套的tensordot调用的任何建议有点类似于einsum符号(数字而不是字母都可以)?

python nested numpy sympy

8
推荐指数
2
解决办法
854
查看次数

标签 统计

nested ×1

numpy ×1

python ×1

sympy ×1