gpt4 book ai didi

python - 有什么办法可以在 sympy 中进行整数除法?

转载 作者:太空狗 更新时间:2023-10-29 21:02:29 24 4
gpt4 key购买 nike

我有一个很长的表达式,我认为它可以被简化,我认为 sympy 将是完成它的完美方式。不幸的是,该公式依赖于几个整数除法,我找不到任何方法来表示 sympy

>>> x=Symbol('x')
>>> (x+1)/2
x/2 + 1/2

显然不是我想要的,1/2 不是整数。

>>> (x+1)//2
TypeError: unsupported operand type(s) for //: 'Add' and 'int'

显然 sympy 不处理 //

>>> Integer((x+1)/2)
# A long list of error messages, ending with ...
TypeError: Integer can only work with integer expressions.

Integer 似乎只适用于常量,而不适用于公式。

有一个函数 trunc 但它似乎没有做任何与我想要的类似的事情。

sympy 中有什么方法可以表示整数除法吗?

最佳答案

条件

我假设您想要一个通过以下测试的函数 div:

from sympy import sympify, simplify, Symbol

def test_div(div):
# check that div behaves as intended for integers
for i in range(-5,5):
for j in range(-5,5):
if j==0: continue
assert i//j == div(sympify(i),sympify(j))

# check that div’s output can be simplified
x = Symbol("x", integer=True)
assert simplify( div(x+1,2) - div(x-1,2) ) == 1

取模

您可以使用模运算符实现整数除法,如下所示:

div = lambda x,y: (x-x%y)/y

由于 SymPy 支持模运算并且能够简化它,因此该函数通过了上述测试。但是,如果无法完全简化,您最终会得到可能不需要的模表达式。

楼层

正如评论中已经提到的,SymPy 提供了一个 floor 函数,可用于获取整数除法(这也是 // 运算符的方式表达式已实现):

div = lambda x,y: sympy.floor(x/y)

但是,floor 不支持简化,因此无法通过第二个测试。

关于python - 有什么办法可以在 sympy 中进行整数除法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43796658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com