我有参数 A 和元组 T,我在字典命名数据中为它们分配了值。然后我创建了方程方程。现在,当我想用值替换符号时,我收到错误"符号"对象不支持索引。我应该如何编写代码来获取元组的第一个值来计算方程?
from sympy import *
A, T = symbols('A T')
data = {A: 1, T: (2,3)}
eq = sqrt(A*T[0])
print(eq.subs(data))
如果T是一个抽象的SymPy符号,T[0]
并没有真正的意义,"某个未确定性质的对象的第0个条目"。这会抛出您得到的错误,交易品种没有索引的概念。
有MatrixSymbol类,它支持双索引。例如:
from sympy import *
A = symbols('A')
T = MatrixSymbol('T', 1, 2) # matrix of size 1 by 2
eq = sqrt((A*T)[0,0])
现在情商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。