首页 > 解决方案 > 使用 sympy 使用条件语句对函数进行 Lambda 化

问题描述

我试图对这个函数进行lambdify

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

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

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

请帮助提前谢谢

标签: sympylambdify

解决方案


您需要将符号表达式传递给,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


推荐阅读