我在python中编写了一个脚本,它使用sympy来计算几个向量/矩阵公式。但是,当我尝试将这些函数转换为我可以使用sympy.lambdify进行评估的函数时,我得到了一个
SyntaxError:扫描字符串文字时的EOL
这里有一些代码有相同的错误,所以你可以看到我的意思。
import sympy
x = sympy.MatrixSymbol('x',3,1)
f = sympy.lambdify(x, x.T*x)
因此,语法错误与表达式" x' .dot(x)"有关。以及" .T"的转换到'。
如何解决这个问题,从上面的lambdify中正确定义f?
答案 0 :(得分:2)
找到一个解决方案,虽然不是最干净的解决方案......但它确实有效。
使用sympy中的implemented_function()方法定义您的函数。阅读完整文档:http://docs.sympy.org/latest/modules/utilities/lambdify.html
以下是代码:
import sympy
import numpy as np
from sympy.utilities.lambdify import implemented_function
x = sympy.MatrixSymbol('x',3,1)
f = implemented_function(sympy.Function('f'), lambda x: x.T*x)
lam_f= sympy.lambdify(x, f(x))
希望这能解决您的问题:)
答案 1 :(得分:1)
已在sympy版本> = 1.1
中解决编辑:
实施例
当你定义这个
x = sympy.MatrixSymbol('x',3,1)
你正在创建一个矩阵,
您可以使用检查其索引和形状
print(sympy.Matrix(x))
现在你想要将x的Transpose乘以x,你必须给x
一个你之前定义的相同形状的矩阵
这里试试这个:
from sympy import MatrixSymbol, lambdify, Matrix
x = MatrixSymbol('x', 3, 1)
f = lambdify(x, x.T*x)
a = Matrix([[1], [2], [3]])
print(f(a))
您可以查看此链接以更好地了解lambdify: http://docs.sympy.org/latest/modules/utilities/lambdify.html