您可能知道,在许多情况下,需要标记矩阵的某些元素。例如,当我们有加权邻接矩阵,并且我们的图形没有完全连接时,我们必须标记一些元素以表明这些节点之间没有边缘。问题是如何做到这一点?将NaN或Inf放在矩阵中的元素上会更好吗?或其他东西(如-1)?
答案 0 :(得分:10)
完全取决于具体情况。在示例中,您提供了一个很好的解决方案可能是使用零,因为边是加权的,并且出于许多目的,0权重边等效于无边。如果您正在进行流/切算法等操作,那就是这样。
通常在选择NaN和Inf之间时,我会选择 NaN 。 Inf有一些您可能不喜欢的属性作为“无效”标记:
Inf*(-1) = -Inf
Inf+(-Inf) = NaN
Inf > 10 = True
etc...
一个干净的解决方案可能是持有另一个布尔矩阵,在连接有效时为True,否则为False。它浪费了一点点记忆,但除非你的矩阵很大,我认为它给你的代码可读性是值得的。