我只是尝试对一个元素列表使用sympy sum,例如:
x = [1,2,3,4,5] expression = sympy.sum(x[i], (i,0,2)) * sympy.sum(x[j], (j,1,3))
我只想用数字来计算它,我总是得到指数,超出范围,尽管它显然没有超出范围,有什么想法吗?
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”:
x
xv = [1,2,3,4,5] expr.subs(x, Array(xv)).doit()
请注意,我将xv转换为SymPy的Array,否则该过程将无法工作。编辑:添加说明如果你的列表是由成百上千或数百万个条目组成的,那么最好将符号表达式转换为lambda函数,以提高计算速度:
xv
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
1条答案
按热度按时间rryofs0p1#
你必须建立一个符号表达式来表示你的求和:
然后,您可以将
x
替换为“array”:请注意,我将
xv
转换为SymPy的Array,否则该过程将无法工作。编辑:添加说明
如果你的列表是由成百上千或数百万个条目组成的,那么最好将符号表达式转换为lambda函数,以提高计算速度: