Sympy Кусочное выражение для четных и нечетных чисел

Цель состоит в том, чтобы реализовать кусочное выражение, которое дает 0, когда n четное, и 1, когда n нечетное. Один из способов сделать это — использовать функцию пола, как показано ниже:

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

и это возвращает правильный вывод. Есть ли способ добиться этого, используя функцию пола в исходном коде?


person D R    schedule 22.10.2015    source источник


Ответы (1)


Лучше было бы использовать Mod, например

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

Однако, поскольку ваша функция точно совпадает с определением Mod, вы можете просто использовать ее напрямую

Mod(n, 2)

или эквивалентно

n % 2
person asmeurer    schedule 22.10.2015