2016-05-21 10 views
3

私は引数AとタプルTを持っています。それから方程式eqを作りました。今ではシンボルを値で置き換えたいときにエラーが発生します。 'シンボル'オブジェクトはインデックス作成をサポートしていません。どのように式を計算するためにタプルの最初の値を取得するコードを書く必要がありますか?'Symbol'オブジェクトはインデックス作成をサポートしていません

from sympy import * 

A, T = symbols('A T') 
data = {A: 1, T: (2,3)} 

eq = sqrt(A*T[0]) 
print(eq.subs(data)) 
+0

'IndexedBase(" T ")'を使用するとほとんど動作しますが、 '(2,3)[0]'は未評価のままであり、 'doit'は評価しません。 – asmeurer

答えて

4

Tは抽象SymPyのシンボルである場合、T[0]は本当に、「未解決な性質のいくつかのオブジェクトの0番目のエントリを」意味がありません。これは、あなたが持っているエラーをスローする、シンボルはインデックスの概念を持っていません。

MatrixSymbolクラスがあり、doubleインデックスをサポートしています。例:

from sympy import * 
A = symbols('A') 
T = MatrixSymbol('T', 1, 2) # matrix of size 1 by 2 
eq = sqrt((A*T)[0,0]) 

ここでeqはsqrt(A * T[0,0])です。

次に、AとT [0,0]を代用することができます。

data = {A: 1, T[0,0]: 2} 
print(eq.subs(data)) 

出力sqrt(2)。私はdata = {A: 1, T: Matrix([[2,3]])}を代用しようとしたとき


は、出力は正しいものの、評価を過小に見え、 sqrt(Matrix([[3, 4]])[0, 0])ました。

いずれにしても、タプルは必要ありません。これは、例えばPythonの3*(1,2)=(1,2,1,2,1,2)の場合とはかなり異なるものです。ところで


あなたの本当の目標が明示的に与えられた数字の配列にいくつかの機能を適用する場合、あなたはおそらくnumpyのが欲しいです。

+0

Ha私は、ほぼ同じ答え、素敵な文言を途中までしていました。 – miradulo

+0

ありがとう、それは動作します;) –

関連する問題