首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Sympy中隐式linsolve(),然后使用lambdify

在Sympy中隐式linsolve(),然后使用lambdify
EN

Stack Overflow用户
提问于 2021-01-24 09:09:13
回答 2查看 111关注 0票数 0

我想问的是,在一个涉及求解的表达式中,是否有可能将np.linalg.solve()lambdify中提取出来?

例如,让

代码语言:javascript
复制
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")

是否可以生成func(A, b) = np.linalg.solve(A, b)

以上代码肯定不起作用。它将首先在linsolve((A, b))失败。

我的尝试是将linsolve((A, b))标记为一个隐式表达式,以便lambdify能够识别它,从而将它与np.linalg.solve连接起来。但我不知道sympy是否支持这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-24 10:49:58

您可以使用函数sympy.codegen.matrix_nodes.MatrixSolve而不是sympy.linsolve

代码语言:javascript
复制
from sympy import MatrixSymbol, lambdify
from sympy.codegen.matrix_nodes import MatrixSolve

A = MatrixSymbol('A', 3, 3)
b = MatrixSymbol('b', 3, 1)


func = lambdify((A, b), MatrixSolve(A, b), modules="numpy")
票数 1
EN

Stack Overflow用户

发布于 2021-01-24 17:49:31

使用MatrixSolvelambdify执行一个简单的词法替换:

代码语言:javascript
复制
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))

或者使用print(func.__doc__)显示该文档(如果不是在ipython/isympy中)。

你最初的问题是使用sympy.linsolve

代码语言:javascript
复制
In [81]: linsolve((A,b))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-81-9ddeeeb0f242> in <module>
----> 1 linsolve((A,b))

/usr/local/lib/python3.8/dist-packages/sympy/solvers/solveset.py in linsolve(system, *symbols)
   2630         if not isinstance(system[0], MatrixBase):
   2631             if sym_gen or not symbols:
-> 2632                 raise ValueError(filldedent('''
   2633                     When passing a system of equations, the explicit
   2634                     symbols for which a solution is being sought must

ValueError: 
When passing a system of equations, the explicit symbols for which a
solution is being sought must be given as a sequence, too.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65868781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档