繁体   English   中英

偶数和奇数的Sympy分段表达式

[英]Sympy Piecewise expression for even and odd numbers

目的是实现一个分段表达式,当n为偶数时为0,当n为奇数时为1。 一种实现方法是使用下限函数,如下所示:

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))

但是,这将返回错误的输出:

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))

这将返回正确的输出。 有没有办法在原始代码中使用floor函数来实现这一目标?

更好的方法是使用Mod ,例如

Piecewise((0, Eq(Mod(n, 2), 0)), (1, Eq(Mod(n, 2), 1)))

但是,由于您的函数与Mod的定义完全一致,因此您可以直接使用它

Mod(n, 2)

或同等

n % 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM