我有参数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))
答案 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。