使用 sympy 使用条件语句对函数进行 Lambdifying

Lambdifying a function with conditon statements using sympy

我正在尝试对这个函数进行 lambdify

def f(x):
    if ceil(x)%2 == 0:
        return -1
    else :
        return +1
a = sympy.lambdify(x,f(x))

当我尝试这样做时出现错误。 我也试过 piecewise ,但它没有给我想要的结果

y = lambdify(x,(Piecewise((1, ceil(x)%2 == 0), (-1,True))))

请帮忙 提前致谢

您需要将符号表达式传递给 lambdify,因此 Python 函数并不适用。您还需要使用符号 sympy 函数,sympy 的 ceil 函数实际上称为 ceiling。最后 == 比较两个表达式是否相同,这与构造符号布尔值不同。为此你需要 Eq: 这给出了

In [19]: p = Piecewise((1, Eq(ceiling(x)%2, 0)), (-1,True))

In [20]: p
Out[20]: 
⎧1   for ⌈x⌉ mod 2 = 0
⎨                     
⎩-1      otherwise    

In [21]: y = lambdify(x, p)

In [22]: y([1, 2, 3])
Out[22]: array([-1.,  1., -1.])

参考文献:

https://docs.sympy.org/latest/modules/functions/elementary.html#ceiling https://docs.sympy.org/latest/tutorial/gotchas.html#equals-signs