当前位置: 首页 > 知识库问答 >
问题:

Networkx:将所有节点最短路径长度之和作为一个聚合值获取

广晔
2023-03-14

我是NetworkX的初学者,我试图找到一种方法,将图中一个节点到其他节点的所有最短路径值汇总为一个聚合值,例如,节点B的长度为6,如下面代码的结果所示。我得到了图中所有节点对之间的最短路径,但是我需要帮助将每个节点的长度添加为一个值,如上所述。任何帮助都将不胜感激。下面是计算最短路径长度的代码。我编辑了这个问题,以便获得单个节点的节点密度值,如下面的代码所示。

>>> import networkx as nx
>>> G = nx.Graph()
>>> G.add_nodes_from(["A", "B", "C", "D", "E"])
>>> G.add_edges_from([("A", "B"), ("B", "C"), ("C", "D"), ("D", "E")])
>>> sp = nx.all_pairs_shortest_path(G)
>>> sp["A"]["E"]
['A', 'B', 'C', 'D', 'E']
>>> spl = nx.all_pairs_shortest_path_length(G)
>>> spl["A"]["E"]
4
>>> dc = 1
>>> for node1 in spl:
...   for node2 in spl[node1]:
...     print("Length between", node1, "and", node2, "is", spl[node1][node2])
...     node_density = spl[node1][node2] - dc
        if(node_density <= 0):
            node_density = 1
        else:
            node_density = 0
Length between B and B is 0
Length between B and A is 1
Length between B and E is 3
Length between B and C is 1
Length between B and D is 2
Length between A and B is 1
... (and so on!)

共有1个答案

欧阳安晏
2023-03-14

由于spl是将每个节点的长度保持到每个其他节点的dicts判决,因此您可以循环通过外部判决并将长度值求和到每个其他节点。

import networkx as nx
G = nx.Graph()
G.add_nodes_from(["A", "B", "C", "D", "E"])
G.add_edges_from([("A", "B"), ("B", "C"), ("C", "D"), ("D", "E")])
sp = dict(nx.all_pairs_shortest_path(G))
sp["A"]["E"]
# ['A', 'B', 'C', 'D', 'E']
spl = dict(nx.all_pairs_shortest_path_length(G))
# spl["A"]["E"]


# sum the lengths to individual nodes
new_dict = {node1: sum([length for length in spl[node1].values()]) for node1 in spl.keys()}
# print the lengths
for node,length in new_dict.items():
    print('The sum of lengths from node {} to all other nodes is {}.'.format(node,length))

#The sum of lengths from node A to all other nodes is 10.
#The sum of lengths from node B to all other nodes is 7.
#The sum of lengths from node C to all other nodes is 6.
#The sum of lengths from node D to all other nodes is 7.
#The sum of lengths from node E to all other nodes is 10.
 类似资料:
  • 我有一个由未加权边构建的图(a),我想计算主图(a)中最大连通图(giantC)的平均最短路径长度。但是,到目前为止,该脚本已经运行了3个多小时(在Colab和本地进行了尝试),对于和都没有输出任何结果。 我使用的是, 这是我的剧本 有没有办法让它更快?或者是计算giantC图的直径和最短路径长度的替代方法?

  • 我有一个简单的代码来创建一个图形,在networkx中的G。 我想找出“G中的哪个节点通过长度等于G直径的最短路径连接到其他节点”。 其中有两种组合[1,3]和[2,4],可以通过nx找到。最短路径(G,1)和nx。分别为最短路径(G,2)。 或者,例如,如果我使用nx。最短路径长度(G,source=2),然后得到{2:0,3:1,1:2,4:2}。因此,长度=2是从节点2到节点4,这是正常的。

  • 本文向大家介绍访问C ++中所有节点的最短路径,包括了访问C ++中所有节点的最短路径的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个带有N个节点的无向连通图,这些节点被标记为0、1、2,...,N-1。图的长度将为N,并且仅当节点i和j连接时,j才与列表graph [i]中的i不完全相同。我们必须找到访问每个节点的最短路径的长度。我们可以在任何节点处开始和停止,可以多次访问节点,并且可以

  • 这个问题是NetworkX特有的。我可以创建自己的函数来完成所有我需要的事情,但是这需要更长的时间,所以我想避免它。 情况: 我有一个未加权图,由NetworkX无向图表示。从这个图中,我寻找“最短循环”——也就是说,对于给定的节点k,我正在寻找最短的简单路径(只通过一个节点一次),它离开k,然后返回k。 为了实现这一点,我想使用任何NetworkX最短路径算法,并从节点k到节点k进行搜索。问题是

  • 因此,如果我在一个图中有两个顶点,它们通过一个以上的边连接,而它们之间有相同的最短路径(即,如果我有节点a和节点B,它们直接通过三条边连接(它们之间有三条最短路径,每个距离为1),所以计数应该返回3)我该如何修改BFS算法来实现这一点?这是我的代码,它只计算2个节点之间的最短路径,而不计算这些最短路径的个数。

  • 下面的堆栈溢出问题 我尝试了在语句中使用两个重复的多个构造,但无法为每个起始顶点获得独立的。我也在使用平台,因此它限制了Gremlin的使用,其中不允许使用循环/脚本。所有gremlin查询必须以并由与链接在一起的命令组成 https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.ht