2014-09-10 74 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)