sympy lambdify与元组中的函数参数?

几何

假设您已经根据fusympy计算进行了计算:

fu= sy.cos(x)+sy.sin(y)+1

哪里

x,y = sy.symbols("x y")

是符号。现在,您要转向fu(显然)两个变量的numpy函数。您可以通过以下方式做到这一点:

fun= sy.lambdify((x,y), fu, "numpy")

然后你生产fun(x,y)有没有一种方法lambdify能产生fun(z)x,y=z,即产生以下功能:

def fun(z):
   x,y=z
   return np.cos(x)+np.sin(y)+1   
安德拉斯·迪克(Andras Deak)

根据您的文档,lambdify您可以将符号嵌套在第一个参数中,以表示签名中的拆包:

import sympy as sym

x,y = sym.symbols('x y')
fu = sym.cos(x) + sym.sin(y) + 1

# original: signature f1(x, y)
f1 = sym.lambdify((x,y), fu)
f1(1, 2)  # returns 2.4495997326938213

# nested: signature f2(z) where x,y = z
f2 = sym.lambdify([(x,y)], fu)
f2((1, 2))  # returns 2.4495997326938213

即使无法在内部执行此操作lambdify,我们也可以定义一个精简包装器,以将lambdified函数的参数解包(尽管这在每次调用时都会较慢地调用一个函数,因此对于很多时候被调用的快速函数,可能会对运行时产生可衡量的影响):

f = sym.lambdify((x,y), fu)  # signature f(x,y)
def unpacking_f(z):  # signature f(z) where x,y = z
    return f(*z)

当然,如果该函数不是要在数值求解器中一次性使用(例如曲线拟合或最小化),则最好将其functools.wraps用于包装器。这将保留由自动生成的文档字符串lambdify

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

设置sympy lambdify参数的默认值

来自分类Dev

SymPy用dot()lambdify

来自分类Dev

Sympy Lambdify与数组输入

来自分类Dev

如何使Sympy lambdify(ed)函数接受数组输入?

来自分类Dev

分段函数和numpy模块的sympy.lambdify错误

来自分类Dev

Sympy用numexpr lambdify ImmutableDenseMatrix

来自分类Dev

在Sympy中隐式linsolve()然后进行lambdify

来自分类Dev

SymPy:使用 sympy.solve 函数的结果

来自分类Dev

sympy中函数的模逆

来自分类Dev

在sympy中定义“派生”函数

来自分类Dev

在sympy中解决函数(python)

来自分类Dev

SymPy:简化逆函数

来自分类Dev

Sympy:指定函数的导数

来自分类Dev

从SymPy符号定义函数

来自分类Dev

SymPy Wronskian函数

来自分类Dev

sympy任意函数范围

来自分类Dev

Sympy 函数替换

来自分类Dev

如何在sympy中编写以符号向量为参数的函数?

来自分类Dev

用任意参数替换sympy函数

来自分类Dev

Python中的Sympy分解

来自分类Dev

S在Sympy中的意义

来自分类Dev

Python中的Sympy分解

来自分类Dev

sympy中的递归替换

来自分类Dev

sympy中的因子分解

来自分类Dev

解决Sympy中的递归

来自分类Dev

SymPy lambdify引发OverflowError:数学范围错误

来自分类Dev

在numpy mesgrid上评估sympy lambdify的结果

来自分类Dev

使用Sympy lambdify函数实例化贝塞尔函数时出错

来自分类Dev

SymPy:将符号的任意列表/元组传递到求解函数