#8577·networkx

使用 Panther/Panther++ 后的几点思考

作者: mrecachinas创建于 2026年3月21日更新于 2026年3月21日

最后我有机会试了这两个,发现了一些小小的惊喜/不一致之处: - 重新查看文档时,样本大小公式使用了 `C(T, 2)`,其中 `T` 是路径中的节点数。我们生成路径的方式是调用 `math.comb(path_length, 2)`,但 `path_length` 是边数,而不是节点数,这意味着我们缺少了样本路径(`C(5,2) = 10` vs `C(6,2) = 15`)。 - 修复方法很简单,就是 `t_choose_2 = math.comb(path_length + 1, 2)`。 - 由于 `index_map` 只包含出现在至少一个样本路径中的节点,对于一个具有足够小的 `R` 的分离图,如果尝试访问从未访问过的节点(`index_map[vi]`),则可能会出现 `KeyError`。 - 我认为遇到这种情况的可能性很低,因为我们在 `panther_similarity` 中删除孤立节点,并且我们在 `panther_vector_similarity` 中对孤立节点进行了防护,但只需 `index_map.get(source, set())` 即可轻松修复。 - 我也在想,我们是否应该在 `panther_vector_similarity` 中处理孤立节点(就像我们在 `panther_similarity` 中那样),而不是拒绝。具有 `source=0` 的 `{0-1, 0-2, 3(孤立)}` 类型的图对于相似性计算来说是完全合法的。 - 根据文档,我们可能需要使用 `math.ceil` 而不是 `int` - 这个"偏差"在实际中影响很小,但我没有注意到 `R` 公式给出了一个下限。 - 在 #4400 中,我曾说过:

内容来源: networkx/networkx