【发布时间】:2023-01-30 21:26:55
【问题描述】:
我目前正在研究几个图形,使用 python-igraph,设置为未定向、加权和截止,以生成它们的边缘介数和节点紧密度。
可以成功获取边介数。但是对于closeness,只有在没有设置cut-off的情况下才能返回结果;或者输出仅为 1 或 NaN。无论图表的大小和权重如何,都会发生此问题。
以下是一个示例图。 Please see the graph here.
我首先通过 Pandas 创建了边缘数据框。
u_index v_index length
0 0 1 1
1 0 2 1
2 0 3 2
3 0 4 3
4 1 2 1
5 3 4 2
然后根据数据框中的信息创建图表。
ntwrg = ig.Graph()
ntwrg.add_vertices(1+max(edges["u_index"].max(), edges["v_index"].max()))
ntwrg.add_edges(list(zip(edges["u_index"], edges["v_index"])))
ntwrg.es["length"] = edges["length"]
然后我开始计算中心性。没有cut-off时,可以成功生成结果:
ntwrg.closeness(weights="length")
cls_cen
0 0.571429
1 0.444444
2 0.444444
3 0.400000
4 0.307692
但是,当添加 cutoff = 3 时,预期结果将是:
ntwrg.closeness(weights="length", cutoff=3)
cls_cen
0 0.571429
1 0.600000
2 0.600000
3 0.400000
4 0.400000
虽然返回的结果是:
Cls_cen
0 1.0
1 1.0
2 1.0
3 NaN
4 NaN
另一方面,即使 cutoff=3 也能正常生成边介数:
ntwrg.edge_betweenness(weights="length", cutoff=3)
Btw_cen
0 2.0
1 2.0
2 3.0
3 1.0
4 1.0
5 1.0
【问题讨论】:
-
当 cutoff=3 时,你能解释一下为什么你期望顶点接近度的这些结果吗?如果没有长度小于 3 的路径,在某些情况下肯定会出现 NaN 的结果,因为路径长度在分母中,因此您不希望它们的总和为 0。
-
另外请注意,我花了很长时间才阅读您的帖子并理解您的问题。如果以更简单的方式重写您的帖子,将受益于更少的代码和更多的图表绘图,更少强调 pandas 数据框,更多强调您提出的实际问题。
-
“由于我对C语言一无所知,所以我无法理解这个输出背后的逻辑。”<<< 这句话我没看懂。 C 语言与这些有什么关系?
-
感谢@Stef 的所有建议。我为我的示例的图形图像编辑了文本和链接。你可以看到在这种情况下所有的边缘都在 3 以内,所以我相信在这种情况下不会有 NaN 的情况。
标签: python graph-theory igraph node-centrality