2016-06-08 38 views
1

我刚刚发现Sympy,所以我仍然不确定如何最好地使用它。 我有一个公式sympy 1.0中的矩阵条目总和python 3.5

Image

与X一20×矩阵,Y一20X1矩阵/ VEKTOR和β一5X1矩阵/ VEKTOR

但是我知道的符号只允许我使用我的一个变量,而不是Matrix中的一个位置。代码:

from sympy import exp, init_printing, sqrt, sin, tan, cos, diff, Sum, Matrix, log, symbols, MatrixSymbol 
init_printing() 
X = MatrixSymbol('X',20,5) 
Y = MatrixSymbol('Y',20,1) 
beta = MatrixSymbol('beta',5,1) 
expr = Sum((Y[i]*exp((Matrix(X[i,:])*Matrix(beta))[0,0])),(i,1,20)) 

这将引发以下错误:

IndexError: Single index only supported for non-symbolic indices. 

Google上搜寻它并没有真正让我至今,随着谷歌似乎总是想谈谈numpy的,而不是sympy。 另外,我猜这是所有非常基本的,所以请请分享你的智慧;)

回答

3

使用IndexedBase

In [1]: X = IndexedBase("X") 

In [2]: Y = IndexedBase("Y") 

In [4]: beta = IndexedBase("beta") 

In [5]: expr = Sum(Y[i]*exp(Sum(X[i, j]*beta[j], (j, 1, 5))), (i, 1, 20)) 

In [7]: pprint(expr) 
    20         
_____         
\ `        
\  5       
    \  __       
    \  \ `       
    ) ) beta[j]*X[i, j]   
/ /_,       
/ j = 1       
/ e      *Y[i] 
/____,        
i = 1   

而且要小心,SymPy数学解释的功能。也就是说,矩阵的指数不是其分量的指数,而是指数收敛的泰勒展开矩阵。它只对平方矩阵有意义。

+0

感谢您的快速回答。在我的例子中,它是一个总和的指数,因为我将X的一行乘以矢量β。在我的论坛中,有一些[0,0]丢失,我修正了这个错误,这是我的原始代码。 –

+0

也感谢“pprint”命令。使它更容易发布在未来:) –

+0

另一个小问题,当我试图评估表达式时发现:Sympy的lambdify似乎有问题与IndexedBase问题。你能推荐一种解决方法,或者一种替代lambdify的方法吗? –