如何在 python 中使用无穷大

How to use infinity in python

我正在 python 中处理图表。我正在尝试获取每个顶点之间的距离。对于一个顶点与另一个顶点之间没有直接路径的情况,我需要使用值 INFINITY(使用字符串“-”表示)。我尝试了几种解决方案。一个是使用一个疯狂的大整数来表示无穷大。但是,我研究并发现这是不好的做法。我还看到了几个关于堆栈溢出的解决方案,它们利用了数学模块的无穷大函数。但是,这不适合我的问题,因为我的 INFINITY 值正在 UI 中使用并且必须在图形上看起来令人愉悦。这就是为什么我的 INFINITY 必须保留为字符串“-”。这是我当前代码行遇到的错误:

TypeError: '<' not supported between instances of 'str' and 'int'

我不太确定,但我认为 < 是因为我使用了 min() 函数。

此错误来自以下代码:

for i in range(length):
    for j in range(length):
        for k in range(length):
            #print('40:', int(temp[j][i]), int(temp[i][k]))
            temp[j][k] = min(temp[j][k], addWithInfinity(temp[j][i],temp[i][k]))

Temp 只是指我在当前使用的方法中作为参数收到的矩阵。这是我的 addWithInfinity 方法:

def addWithInfinity(a, b):
"""If a == INFINITY or b == INFINITY, returns INFINITY.
Otherwise, returns a + b."""
if a == LinkedDirectedGraph.INFINITY or b == LinkedDirectedGraph.INFINITY:
    return LinkedDirectedGraph.INFINITY
else: return a + b

我的问题是我正在尝试将无穷大与 int 进行比较。我尝试将 INFINITY 转换为 int,如下所示:int(INFINITY)(或 int('-')),但出现以下错误:

ValueError: invalid literal for int() with base 10: '-'

有什么想法可以让我摆脱 int 和 INFINITY(字符串)之间的比较吗?

使用float("inf")math.inf

另见 How can I represent an infinite number in Python?

>>> float("inf") > 5
True
>>> float("inf") < 10**100
False
>>> import math
>>> float("inf") == math.inf
True

如果您需要使用 "inf" 以外的其他值来表示无穷大,例如您示例中的 '-',您可以 try/except 它,或者

  • 检查初始值是否是您的目标字符串 (if a == '-':)
  • 解析在其上调用float的错误(if "'-'" in str(err_string):)
try:
    a = float(a)
except ValueError as ex:
    # special-case for ValueError: could not convert string to float: '-'
    if "'-'" in str(ex).split(":")[-1]:
        a = float("inf")
    else:  # re-raise other ValueErrors
        raise ex

String "-" 不是无穷大,即使你是认真的。在Python中,可以通过两种方式获取类型:

float("inf")

import math
math.inf

你的问题与无限类型的用法或用例无关,而是表示问题。我相信你应该在你的数学中使用正常的无穷大类型并在你的 class 中创建一个 属性 那 returns "-" 然后只有当你需要代表它时才使用它UI 但不在你的数学中。

您遇到的问题更多是关于表示和逻辑的解耦。