偶数和奇数的 Sympy 分段表达式
Sympy Piecewise expression for even and odd numbers
objective是实现一个分段表达式,当n为偶数时给出0,当n为奇数时给出1。一种方法是使用 floor 函数,如下所示:
from sympy import *
from sympy.abc import n
f = Lambda((n,), Piecewise((0, Eq(n, floor(n / S(2)))),
(1, Eq(n, floor(n / S(2))+1))))
print(f(0))
print(f(1))
print(f(2))
print(f(3))
然而,这个returns错误的输出:
0
1
1
Piecewise()
正确的输出应该是:
0
1
0
1
实现相同目的的另一种方法是使用:
from sympy import *
from sympy.abc import n
f = Lambda((n,), Piecewise((0, Eq((-1)**n, 1)),
(1, Eq((-1)**n, -1))))
print(f(0))
print(f(1))
print(f(2))
print(f(3))
和这个 returns 正确的输出。有没有办法用原代码中的floor函数来实现?
更好的方法是使用 Mod
,例如
Piecewise((0, Eq(Mod(n, 2), 0)), (1, Eq(Mod(n, 2), 1)))
但是,由于你的函数和Mod
的定义完全吻合,你可以直接使用
Mod(n, 2)
或等同于
n % 2
objective是实现一个分段表达式,当n为偶数时给出0,当n为奇数时给出1。一种方法是使用 floor 函数,如下所示:
from sympy import *
from sympy.abc import n
f = Lambda((n,), Piecewise((0, Eq(n, floor(n / S(2)))),
(1, Eq(n, floor(n / S(2))+1))))
print(f(0))
print(f(1))
print(f(2))
print(f(3))
然而,这个returns错误的输出:
0
1
1
Piecewise()
正确的输出应该是:
0
1
0
1
实现相同目的的另一种方法是使用:
from sympy import *
from sympy.abc import n
f = Lambda((n,), Piecewise((0, Eq((-1)**n, 1)),
(1, Eq((-1)**n, -1))))
print(f(0))
print(f(1))
print(f(2))
print(f(3))
和这个 returns 正确的输出。有没有办法用原代码中的floor函数来实现?
更好的方法是使用 Mod
,例如
Piecewise((0, Eq(Mod(n, 2), 0)), (1, Eq(Mod(n, 2), 1)))
但是,由于你的函数和Mod
的定义完全吻合,你可以直接使用
Mod(n, 2)
或等同于
n % 2