首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在NetworkX中计算单个节点的介数中心性?

如何在NetworkX中计算单个节点的介数中心性?
EN

Stack Overflow用户
提问于 2018-11-05 08:50:45
回答 1查看 2K关注 0票数 3

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

代码语言:javascript
运行
复制
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“似乎是一个无效的函数,但我找不到获取它的方法。

有人能看看这个吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-11-05 23:22:16

恐怕这不能直接解决你的问题。

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

使其变慢的部分是,它必须找到每一对节点之间的最短路径,然后查看通过每个节点的分数,这些节点的中心性是您想要的。因此,即使你只想知道几个节点的这一点,你仍然必须找到所有最短路径,这是到目前为止最昂贵的计算部分。因此,给出一个选项来完成所有这些工作,然后只报告几个节点的中心性是没有多大意义的。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53146972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档