下面是我的代码
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))吗?
发布于 2022-02-23 08:20:23
help(f)显示器:
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__是同一个字符串。
由于我们指定了“数学”,所以标量可以工作,而不是数组:
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发布于 2022-11-03 10:30:34
我已经研究了Sympy的源代码,并找到了在变量funcstr中定义lambdified函数内容的这一行。
# 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,但我在本地安装中对它进行了修改,使其能够返回,这似乎就是您所追求的。
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,此提取将不准确,因为它将忽略前面的简化。
https://stackoverflow.com/questions/71233183
复制相似问题