2016-06-08 35 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的方法嗎? –