我在古老的BBS游戏“ TradeWars 2002”中绘制了图形的所有边缘。有1000个节点。尽管节点之间的大多数边是无向的,但该图正式是有向图。该图是牢固连接的。
我在networkx
中对宇宙建模。我想使用networkx方法来识别网络中的“最远端”节点。我不知道如何用图论术语表达“最远的”。但是我的想法是,当有人在其他两个任意节点之间转换时,很少会碰到节点。还有这样一个想法,即在连接良好的节点的边缘,可能有一串节点沿着一条终止的单一路径延伸。
我对我想象中的节点733进行了可视化。与其他连接良好的节点相比,几乎不可能有人偶然发现了该节点。
我可以从networkx库中使用什么来量化“远程”程度?
这是整个宇宙:
答案 0 :(得分:2)
但是我的想法是,当有人在其他两个任意节点之间转换时,很少会碰到节点。
正如@Joel所提到的,有许多集中度度量可用,并且它们之间通常存在很强的相关性,因此其中许多可能会或多或少地为您提供所需的信息。
话虽这么说,但我认为最能反映您的直觉的中心度度量标准是基于random walks。其中一些计算成本很高(尽管有关此方面的一些最新改进,请参见this paper),但幸运的是有一个强大的correspondence between the Eigenvector centrality and the frequency with which nodes are visited by a random walker。
networkx中的实现可通过networkx.algorithms.centrality.eigenvector_centrality
获得。
答案 1 :(得分:1)
networkx
收集了用于解决此类问题的算法:centrality。例如,您可以使用最简单的函数:closeness_centrality:
# Create a random graph
G = nx.gnp_random_graph(50, 0.1)
nx.closeness_centrality(G)
{0: 0.3888888888888889,
1: 0.45794392523364486,
2: 0.35507246376811596,
3: 0.4375,
4: 0.4083333333333333,
5: 0.3684210526315789,
...
# Draw the graph
labels = {n: n for n in G.nodes}
nx.draw(G, with_labels=True, labels=labels)
可以通过返回closeness_centrality
最少的节点来列出最远(较不中央)的节点(请注意,上图中的节点ID和蓝色圆圈中的节点:
c = nx.closeness_centrality(G)
sorted(c.items(), key=lambda x: x[1])[:5]
[(48, 0.28823529411764703),
(7, 0.33793103448275863),
(11, 0.35251798561151076),
(2, 0.35507246376811596),
(46, 0.362962962962963)]