SymPy中带有索引变量的求和

8

我试图创建一个带有索引变量的Sum sympy表达式,就像之前在这里解释的那样。但是,我无法将此表达式进行lambdify并提供数组以计算求和。这是否不可能?

2个回答

4
您可以使用lambdify。只需确保总和的限制与numpy数组的可迭代范围匹配即可。
from sympy import Sum, symbols, Indexed, lambdify
import numpy as np

x, i = symbols("x i")
s = Sum(Indexed('x',i),(i,0,3))
f = lambdify(x, s)
b = np.array([1, 2, 3, 4])
f(b)

4
也许是这样吗?
s = Sum(Indexed('x',i),(i,1,3))
f = lambda x: Subs(s.doit(), [s.function.subs(s.variables[0], j)
for j in range(s.limits[0][1], s.limits[0][2] + 1)], x).doit()

>>> f((30,10,2))
42

谢谢!虽然你的解决方案完美地运行了,但为了完整起见,我要找的不完全是那个。在你的例子中,你将总和限制在1到3之间,而我想要从0到n(基本上是针对一个具有可变大小的数组)。我现在知道如何做了,但我不知道如何正确地将代码添加到评论中! - Diogo Santos
最好添加一些解释,因为它不是很直观(Sum文档中没有提到s.limits)。我刚开始使用sympy;在我的看法中,[s.function.subs(s.variables[0], j)... for j in range(s.limits[0][1], s.limits[0][2] + 1)]将索引元素替换为它们的等效整数,然后再进行替换。这一步似乎是必要的。 - mattator
我会给另一篇帖子点赞,只要那篇帖子的解决方案代码可以更容易地复制粘贴。 - mins
代码已更新。 - smichr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接