2014-09-10 3 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

+0

@Mauricio отлично ... так как вы новичок здесь: не забывайте, что вы также можете поддержать ответы и вопросы, которые вы хотели бы сделать;);) –

0

Выполнение функции f, возвращающей итоговый расчет, - это то, что должно произойти здесь, чтобы заставить его работать так, как вы его получили.

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

l = sum(f(k,w) for k in u) 
Смежные вопросы