在NumPy数组上求解SymPy表达式的总和

4
所以,如果我这样做
import sympy as sp
import numpy as np
u = np.random.uniform(0, 1, 10)
w, k = sp.symbols('w k')
l = sum(1 - sp.log(k + w) + sp.exp(k + w) for k in u)

我想要的是(对于 w 的函数,u 的符号求和)。但写成以下形式会更为实用:

f = 1 - sp.log(k + w) + sp.exp(k + w)
l = sum(f for k in u)

但是我遇到了一个问题。
10*exp(k + w) - 10*log(k + w) + 10

发生了什么?有没有办法得到我想要的总和?(SymPy有几种整数求和的方法,但我没有找到适用于数组的方法)(版本:Python 2.7.6,NumPy 1.8.1,SymPy 0.7.4.1)

2个回答

4
问题在于f并未被每个k进行评估。请尝试以下操作:
sum([f.subs(dict(k=k)) for k in u])

它将为您提供正确的结果。其中使用subs()强制对k的每个值求解f


正是我所需要的。谢谢! - Mauricio
@Mauricio 很好...既然你是新来的:不要忘记,如果你喜欢,也可以给答案和问题点赞.... ;) - Saullo G. P. Castro

0
让f成为一个返回计算结果的函数是使它按照你的期望工作所需要的。
f = lambda k,w : 1 - sp.log(k + w) + sp.exp(k + w)

l = sum(f(k,w) for k in u)

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