'Symbol'对象不支持索引

时间:2016-05-21 08:55:10

标签: python sympy

我有参数A和元组T,我在字典命名数据中分配它们。然后我创建了等式eq。现在,当我想用​​值替换符号时,我得到错误'符号'对象不支持索引。我应该如何编写代码来获取元组的第一个值来计算方程式?

from sympy import *

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

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

1 个答案:

答案 0 :(得分: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。