在Python中单独测试正无穷大或负无穷大

在Python中单独测试正无穷大或负无穷大,python,infinity,Python,Infinity,正无穷大或负无穷大的测试集中在一起。什么是蟒蛇式的测试方法 测试正无穷大的方法: x==float('+inf') math.isinf(x)和x>0 测试负无穷大的方法: x==float('-inf') math.isinf(x)和x0之外,似乎更喜欢方式2。这种“pythonic”方式是与可读性和可维护性相结合 也就是说,x==float(“inf”)和x==float(“-inf”)对我来说更可读,我更喜欢它们数学.isinf(x)和x>0的速度更快,但每次调用大约只有40纳秒 因此,除

正无穷大或负无穷大的测试集中在一起。什么是蟒蛇式的测试方法

测试正无穷大的方法:

  • x==float('+inf')
  • math.isinf(x)和x>0
  • 测试负无穷大的方法:

  • x==float('-inf')
  • math.isinf(x)和x<0
  • 拆卸方式1:

    >>> def ispinf1(x): return x == float("inf")
    ...
    >>> dis.dis(ispinf1)
      1           0 LOAD_FAST                0 (x)
                  3 LOAD_GLOBAL              0 (float)
                  6 LOAD_CONST               1 ('inf')
                  9 CALL_FUNCTION            1
                 12 COMPARE_OP               2 (==)
                 15 RETURN_VALUE
    
    拆卸方式2:

    >>> def ispinf2(x): return isinf(x) and x > 0
    ...
    >>> dis.dis(ispinfs)
      1           0 LOAD_GLOBAL              0 (isinf)
                  3 LOAD_FAST                0 (x)
                  6 CALL_FUNCTION            1
                  9 JUMP_IF_FALSE_OR_POP    21
                 12 LOAD_FAST                0 (x)
                 15 LOAD_CONST               1 (0)
                 18 COMPARE_OP               4 (>)
            >>   21 RETURN_VALUE
    
    除了x>0之外,似乎更喜欢方式2。

    这种“pythonic”方式是与可读性和可维护性相结合

    也就是说,
    x==float(“inf”)
    x==float(“-inf”)
    对我来说更可读,我更喜欢它们<代码>数学.isinf(x)和x>0的速度更快,但每次调用大约只有40纳秒


    因此,除非你检查了大量的数字,否则它不会对运行时间产生太大影响。

    还有
    numpy

    >>> import numpy as np
    >>> np.isneginf([np.inf, 0, -np.inf])
    array([False, False,  True], dtype=bool)
    >>> np.isposinf([np.inf, 0, -np.inf])
    array([ True, False, False], dtype=bool)
    
    然后是常规
    isinf

    >>> np.isinf([np.inf, 0, -np.inf])
    array([ True, False,  True], dtype=bool)
    

    如果您也在使用,例如symphy,那么math.isinf(symphy.oo)将给出正确的答案,而symphy.oo==float(“inf”)将为false。还可以将
    float(“inf”)
    float(“-inf”)
    的结果存储在变量中,以避免最小的惩罚。“每次调用仅40纳秒左右”?只有这是cpu时间的十年