【问题标题】:Sympy check if a number is naturalSympy检查数字是否自然
【发布时间】:2021-04-23 13:39:35
【问题描述】:

如果我是一个随机数,我如何检查它是否是一个整数(∈ℕ)?

>>> from sympy.core.numbers import Float
>>> Float(2)
2.00000000000000
>>> Float(2).is_integer
False # what ??

我找到了一个简单的解决方法,但我觉得这有点像 hack:

>>> Float(2) % 1 == 0
True
>>> Float(2.5) % 1 == 0
False

那么有没有更合适的方法来判断一个数字是否自然?

【问题讨论】:

    标签: python floating-point integer sympy


    【解决方案1】:

    这种查询出现在整个 SymPy 代码库中,我们对此的解决方案是在有问题的表达式上使用 as_int。当strict 标志关闭时,与 int 等效的浮点数将作为 int 返回。否则(或者如果表达式不是整数)将引发 ValueError:

    >>> from sympy import Float
    >>> from sympy.core.compatibility import as_int
    >>> as_int(2.0)
    Traceback (most recent call last):
    ... 
    ValueError: 2.0 is not an integer
    
    >>> as_int(2.0, strict=False)
    2
    

    在测试函数中使用 this 给出:

    >>> def isint(i):
    ...     try: as_int(i, strict=False)
    ...     except: return False
    ...     return True
    >>> isint(Float(2))
    True
    

    【讨论】:

    • 如果您使用 SymPy 数字,这是我们想出的最好的。它基本上是在测试是否n == int(n) 并注意可能引发错误的情况。但如果你只是传递数字,那么isint = lambda x: x == int(x).
    • 这个主意不错。我的 hack 快了 4 倍(用 timeit 测试过),但这没什么大不了的
    • 除了回答恭喜谢谢
    • OP - 通常 performancesympy 不要一起使用。我们使用sympy 是因为我们想要符号计算的通用性。对于纯数字工作,请坚持使用纯 Python,或使用 numpy 处理数组。
    • 我用它是因为它可以简化平方根和长而复杂的表达式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    相关资源
    最近更新 更多