如何使用sympy来添加带索引的表达式

时间:2014-12-02 04:44:28

标签: python loops sympy

我在pandas中有一个数据框,第一列名为x0,第二列是x1。它有很多(如100)行。因此,我有100组[x0,x1],然后我想生成一个长表达式,每个与一个组相关。更清楚的是,我想要做的任务是生成一个表达式:

exp(b0*x00+b1*x10)+exp(b0*x01+b1*x11)+...exp(b0*(x0 100) + b1*(x1 100))

b0b1都是未知值(符号),稍后我会找到他们的解决方案。

简而言之,我需要表达sigma(exp(b0*x0+b1*x1)),sigma有100个项目,x0,x1 n是一个数据帧,但我不知道如何编写循环。

请帮帮我。

2 个答案:

答案 0 :(得分:0)

我希望这会有所帮助,我对熊猫并不熟悉,但你需要来自同情的summation(f,(i,a,b))。

基本上,你只需要声明像expr = summation(exp,(i,0,101))之类的东西 在这种情况下,你的'exp'函数已经在其中包含符号b0和b1术语。

当你想要将它打印出来时,你只需要使用pprint(expr)而不是print()。

答案 1 :(得分:0)

一个简单的python for-loop就足以生成该表达式:

>>> import numpy as np  # pandas uses numpy arrays
>>> import sympy as sym
>>> x = np.random.rand(5,2).view(dtype=[('x0', np.float), ('x1', np.float)])
>>> b0, b1 = sym.symbols('b0 b1')
>>> x['x0']  # to show the contents
array([[ 0.1389724 ],
       [ 0.14091647],
       [ 0.08886302],
       [ 0.48792306],
       [ 0.749205  ]])
>>> expr = 0
>>> for x0, x1 in zip(x['x0'], x['x1']): 
...     # build up the expression term by term:
...     expr += sym.exp(b0 * float(x0) + b1 *float(x1))
... 
>>> expr
exp(0.0888630154325879*b0 + 0.597823474111901*b1) + exp(0.138972400914926*b0 + 0.0275642343608167*b1) + exp(0.140916465250792*b0 + 0.0662746588259522*b1) + exp(0.487923064546991*b0 + 0.922545565808876*b1) + exp(0.7492050039088*b0 + 0.911117507753871*b1)