在NumPy数组上汇总SymPy表达式

时间:2014-09-10 19:44:27

标签: python numpy sympy

所以,如果我这样做

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)

我得到了我想要的东西(u的符号和作为w的函数)。但是,编写

会更有用
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 个答案:

答案 0 :(得分:2)

问题是没有为每个f评估k。试试这个:

sum([f.subs(dict(k=k)) for k in u])

它会给你正确的结果。使用subs()强制对f的每个值进行k的评估。

答案 1 :(得分:0)

将f作为返回结果计算的函数,需要在此处进行,以使其按照您的方式工作。

f = lambda k,w : 1 - sp.log(k + w) + sp.exp(k + w)

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