2014-09-10 72 views
3

所以,如果我这样做总和SymPy表达了与NumPy阵列

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)

回答

1

问题是f不是评估每个k。试试这个:

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

它会给你正确的结果。其中subs()正在用于强制f对每个值k的评估。

+0

正是我所需要的。谢谢! – Mauricio 2014-09-11 01:21:21

+0

@Mauricio伟大的...因为你是新来的人:不要忘记你也可以upvote答案和你想问的问题....;) – 2014-09-11 12:52:13

0

使f返回结果计算的函数是需要在这里发生的,使它按照您拥有的方式工作。

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

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