首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解渐近lambdify函数

解渐近lambdify函数
EN

Stack Overflow用户
提问于 2022-02-23 07:59:54
回答 2查看 190关注 0票数 0

下面是我的代码

代码语言:javascript
复制
from sympy import * 
  
x = symbols('x')
expr = sin(x)
     
# Use sympy.lambdify() method
f = lambdify(x, expr, "math") 

如果print(f)给出'<function _lambdifygenerated at 0x100d643a0>',有什么方法可以从f返回表达式(sin(x))吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-23 08:20:23

help(f)显示器:

代码语言:javascript
复制
Help on function _lambdifygenerated:

_lambdifygenerated(x)
    Created with lambdify. Signature:
    
    func(x)
    
    Expression:
    
    sin(x)
    
    Source code:
    
    def _lambdifygenerated(x):
        return sin(x)

f.__doc__是同一个字符串。

由于我们指定了“数学”,所以标量可以工作,而不是数组:

代码语言:javascript
复制
In [12]: f(1.23)
Out[12]: 0.9424888019316975

In [13]: f(np.arange(3))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [13], in <module>
----> 1 f(np.arange(3))

File <lambdifygenerated-2>:2, in _lambdifygenerated(x)
      1 def _lambdifygenerated(x):
----> 2     return sin(x)

TypeError: only size-1 arrays can be converted to Python scalars
票数 2
EN

Stack Overflow用户

发布于 2022-11-03 10:30:34

我已经研究了Sympy的源代码,并找到了在变量funcstr中定义lambdified函数内容的这一行。

https://github.com/sympy/sympy/blob/88b9cba9d7e633ec769baf1fc5267acfd7f54788/sympy/utilities/lambdify.py#L863

代码语言:javascript
复制
# Create the function definition code and execute it
funcname = '_lambdifygenerated'
if _module_present('tensorflow', namespaces):
    funcprinter = _TensorflowEvaluatorPrinter(printer, dummify) # type: _EvaluatorPrinter
else:
    funcprinter = _EvaluatorPrinter(printer, dummify)

if cse == True:
    from sympy.simplify.cse_main import cse as _cse
    cses, _expr = _cse(expr, list=False)
elif callable(cse):
    cses, _expr = cse(expr)
else:
    cses, _expr = (), expr
funcstr = funcprinter.doprint(funcname, iterable_args, _expr, cses=cses)

目前Sympy不返回funcstr,但我在本地安装中对它进行了修改,使其能够返回,这似乎就是您所追求的。

代码语言:javascript
复制
import sympy as sy 
  
x = sy.symbols('x')
expr = sy.sin(x)
     
# Use sympy.lambdify() method
f, funcstr = sy.lambdify(x, expr, "math") 

funcstr.split(":")[-1].split("return")[-1].strip()
>>> 'sin(x)'

我获取内容的方式有点不可靠,也不一定健壮,但我希望它能给您提供一个工作的起点。

请注意,如果使用参数cse,此提取将不准确,因为它将忽略前面的简化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71233183

复制
相关文章

相似问题

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