如何在python中对列表的元素使用sympy sum?

g9icjywg  于 2023-04-08  发布在  Python
关注(0)|答案(1)|浏览(81)

我只是尝试对一个元素列表使用sympy sum,例如:

x = [1,2,3,4,5]

expression = sympy.sum(x[i], (i,0,2)) * sympy.sum(x[j], (j,1,3))

我只想用数字来计算它,我总是得到指数,超出范围,尽管它显然没有超出范围,有什么想法吗?

rryofs0p

rryofs0p1#

你必须建立一个符号表达式来表示你的求和:

from sympy import *
x = IndexedBase("x")
i, j = symbols("i, j")
expr = Sum(x[i], (i,0,2)) * Sum(x[j], (j,1,3))

然后,您可以将x替换为“array”:

xv = [1,2,3,4,5]
expr.subs(x, Array(xv)).doit()

请注意,我将xv转换为SymPy的Array,否则该过程将无法工作。
编辑:添加说明
如果你的列表是由成百上千或数百万个条目组成的,那么最好将符号表达式转换为lambda函数,以提高计算速度:

f = lambdify(x, expr)
import inspect
print(inspect.getsource(f))
# def _lambdifygenerated(Dummy_26):
#     return (builtins.sum(Dummy_26[i] for i in range(0, 2+1)))*(builtins.sum(Dummy_26[j] for j in range(1, 3+1)))

f(xv)
# 54

相关问题