使用 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
我正在尝试对这个函数进行 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