Python Sympy中的隐式linsolve(),然后是lambdify
我在问,在涉及求解的表达式上,是否可以从Python Sympy中的隐式linsolve(),然后是lambdify,python,numpy,sympy,Python,Numpy,Sympy,我在问,在涉及求解的表达式上,是否可以从lambdify中获取np.linalg.solve() 例如,让 from sympy import MatrixSymbol, linsolve, lambdify A = MatrixSymbol('A', 3, 3) b = MatrixSymbol('b', 3, 1) func = lambdify((A, b), linsolve((A, b)), modules="numpy") 是否可以生成函数(A,b)=np.
lambdify
中获取np.linalg.solve()
例如,让
from sympy import MatrixSymbol, linsolve, lambdify
A = MatrixSymbol('A', 3, 3)
b = MatrixSymbol('b', 3, 1)
func = lambdify((A, b), linsolve((A, b)), modules="numpy")
是否可以生成函数(A,b)=np.linalg.solve(A,b)
上述代码肯定不起作用。它将首先在linsolve((A,b))
处失败
我的尝试是以某种方式将
linsolve((A,b))
标记为隐式表达式,以便lambdify
能够识别它,从而将它与np.linalg.solve
链接起来。但是我没有发现symphy
是否支持此功能。您可以使用functionsymphy.codegen.matrix\u nodes.MatrixSolve
而不是symphy.linsolve
来自sympy导入矩阵SYMBOL,lambdify
从sympy.codegen.matrix_节点导入MatrixSolve
A=矩阵符号('A',3,3)
b=矩阵符号('b',3,1)
func=lambdify((A,b),MatrixSolve(A,b),modules=“numpy”)
您可以使用函数sympy.codegen.matrix\u nodes.MatrixSolve
而不是sympy.linsolve
来自sympy导入矩阵SYMBOL,lambdify
从sympy.codegen.matrix_节点导入MatrixSolve
A=矩阵符号('A',3,3)
b=矩阵符号('b',3,1)
func=lambdify((A,b),MatrixSolve(A,b),modules=“numpy”)
使用矩阵solve
,lambdify
执行简单的词汇替换:
In [87]: MatrixSolve(A,b)
Out[87]: MatrixSolve(MatrixSymbol(Str('A'), Integer(3), Integer(3)), vector=MatrixSymbol(Str('b'), Integer(3), Integer(1)))
In [88]: func = lambdify((A, b), MatrixSolve(A, b), modules="numpy")
In [89]: func
Out[89]: <function _lambdifygenerated(A, b)>
In [90]: func?
Signature: func(A, b)
Docstring:
Created with lambdify. Signature:
func(A, b)
Expression:
MatrixSolve(A, vector=b)
Source code:
def _lambdifygenerated(A, b):
return (solve(A, b))
使用
MatrixSolve
,lambdify
执行简单的词汇替换:
In [87]: MatrixSolve(A,b)
Out[87]: MatrixSolve(MatrixSymbol(Str('A'), Integer(3), Integer(3)), vector=MatrixSymbol(Str('b'), Integer(3), Integer(1)))
In [88]: func = lambdify((A, b), MatrixSolve(A, b), modules="numpy")
In [89]: func
Out[89]: <function _lambdifygenerated(A, b)>
In [90]: func?
Signature: func(A, b)
Docstring:
Created with lambdify. Signature:
func(A, b)
Expression:
MatrixSolve(A, vector=b)
Source code:
def _lambdifygenerated(A, b):
return (solve(A, b))
如何验证您的
func
是否真正调用了np.linalg.solve()
?实际上,它永远不能调用np.linalg.solve
,这可以从源代码symphy.printing.pycode
中看出,其中包含了symphy支持的所有函数。使用方程x=A**(-1)*b是使其作为np.linalg.solve
工作的最简单方法,否则您可能必须为您自己的打印机编码。检查此项,我发现有np.linalg.solve
打印机。你知道怎么称呼它吗?我想我在这里找到了答案;你想详细说明你的答案吗,这样我就可以接受了?很抱歉,我到目前为止还没有更新我的sympy。我马上改变我的答案。你如何验证你的func
函数是否真的调用了np.linalg.solve()
?实际上,它永远不能调用np.linalg.solve
,从源代码symphy.printing.pycode
中可以看出,其中包含了symphy支持的所有函数。使用方程x=A**(-1)*b是使其作为np.linalg.solve
工作的最简单方法,否则您可能必须为您自己的打印机编码。检查此项,我发现有np.linalg.solve
打印机。你知道怎么称呼它吗?我想我在这里找到了答案;你想详细说明你的答案吗,这样我就可以接受了?很抱歉,我到目前为止还没有更新我的sympy。我马上更改答案。您的错误在linsolve((A,b))
中,而不是lambdify
。当您遇到这样的故障时,请使用回溯显示错误。您的错误位于linsolve((A,b))
,而不是lambdify
。当您遇到这样的故障时,请用回溯显示错误。