如何计算NetworkX中单个节点的中间性中心度?

2024-09-27 07:30:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算一个非常大的图中几个节点的中间性。我一直在用NetworkX。问题是它不能让我选择需要中心化的节点。我试图修改源代码,但它给了我错误。以下是我所做的:

betweenness = dict.fromkeys(G, 0.0)  # b[v]=0 for v in G
if k is None:
    nodes = G
    #nodes = nx.Graph()
    #for indx in range(0, G.size()):
        #if indx in subset:
            #nodes.add_node(allNodes[indx])
else:
    random.seed(seed)
    nodes = random.sample(G.nodes(), k)
for s in nodes:
    n = nodes.nodes().index(s)
    if n in subset:
        # single source shortest paths
        if weight is None:  # use BFS
            S, P, sigma = _single_source_shortest_path_basic(G, s)
        else:  # use Dijkstra's algorithm
            S, P, sigma = _single_source_dijkstra_path_basic(G, s, weight)
            # accumulation
            if endpoints:
                betweenness = _accumulate_endpoints(betweenness, S, P, sigma, s)
            else:
                betweenness = _accumulate_basic(betweenness, S, P, sigma, s)
# rescaling
betweenness = _rescale(betweenness, len(interCommNodes),
                       normalized=normalized,
                       directed=G.is_directed(),
                       k=k)
return betweenness

子集包含原始图中的所有节点索引。虽然“index”似乎是一个无效函数,我无法找到获取它的方法。在

有人能看看这个吗?在

谢谢!在


Tags: innonesourceforif节点basicis
1条回答
网友
1楼 · 发布于 2024-09-27 07:30:42

恐怕这不能直接回答你的问题。在

您尝试进行此计算的原因大概是为了加快速度,因为中间性是一个缓慢的计算(Networkx never finishes calculating Betweenness centrality for 2 mil nodes)。在

使它变慢的部分是它必须找到每一对节点之间的最短路径,然后查看每一个节点的中心度是多少。因此,即使你只想知道几个节点的情况,你仍然需要找到所有最短的路径,这是目前计算中最昂贵的部分。因此,让我们选择完成所有这些工作,然后只报告几个节点的中心性,这并没有多大意义。在

如果你确实需要加快计算速度,有一种方法可以进行近似计算。与其获取每一对节点并找出它们之间的最短路径,不如对所有节点进行采样并查看它们之间的最短路径。有关详细信息,请参阅此答案:https://stackoverflow.com/a/32468942/2966723

相关问题 更多 >

    热门问题