Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sympy中的隐式linsolve(),然后是lambdify_Python_Numpy_Sympy - Fatal编程技术网

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
是否支持此功能。

您可以使用function
symphy.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
。当您遇到这样的故障时,请用回溯显示错误。