我想对用 sympy 编写的函数进行羔羊化

问题描述 投票:0回答:2

在 sympy 中我写了一个这样的函数:

from sympy import *
x, y = symbols('x y')
def Func(x,y):
   return sin(x) + cos(y)

一切正常,但我找不到办法对此进行羔羊化,例如

Func_lam = lambdify(x, y, Func)
z = Func_lam(1,2)

给出一个错误,它说这已被弃用。 我将非常感谢您的帮助!

sympy lambdify
2个回答
0
投票

lambdaify 的第一个参数应该是一个可迭代对象,第二个参数应该是一个表达式。您传递了 3 个参数,第三个参数不是表达式,它是一个函数,当您告诉它参数是什么时,它将返回一个表达式。将您拥有的与此进行比较:

>>> from sympy import *
>>> def Func(x,y): return sin(x) + cos(y)
>>> x, y = symbols('x y')
>>> f = lambdify((x,y), Func(x,y))
>>> f(1,2)
0.4253241482607541

0
投票

如何做到这一点

import numpy as np
import sympy as sp

def Func(x,xp,fp): 
    return np.interp(x,xp,fp)
x, xp, fp = sp.symbols('x xp fp')
f = sp.lambdify((x,xp,fp), Func(x,xp,fp))

xpv = np.array([1.0, 2.0, 3.0])
fpv = np.array([4.0, 5.0, 6.0])
f(1.5,xpv,fpv)
    
# or, taking it a bit further:
expr = sp.sin(x) + Func(x,xp,fp)
f = sp.lambdify((x,xp,fp), Func(x,xp,fp))
        
xpv = np.array([1.0, 2.0, 3.0])
fpv = np.array([4.0, 5.0, 6.0])
f(1.5,xpv,fpv)

我尝试过 Sympy 自定义函数,但相对于 sp.sin 等基本函数,它们在表达式和 lamdify 中的行为似乎有所不同

© www.soinside.com 2019 - 2024. All rights reserved.