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

Networkx带标签的平均最短路径

卫英悟
2023-03-14

我想计算标记图中具有相同标签的节点的平均最短路径。例如,红色标记为A,黑色标记为B。

G = nx.DiGraph()
G.add_node('A', label = 'A')
G.add_node('B', label = 'B')
G.add_node('C', label = 'A')
G.add_node('D', label = 'B')
G.add_edges_from([('A', 'B'), ('B', 'C'), ('C', 'D'), ('D', 'A')])
H = G.to_undirected()

V_m是具有相同标签的顶点。n{i,j}是最短路径数,d{i,j}是测地距离。

我想使用Networkx来实现它。开始使用节点属性进行标记。

我可以用

graph_labels = (nx.get_node_attributes(G, 'label'))

现在我只想将键/值对保留在标签为例如“A”的位置。因此,我可以关注具有相同标签的节点。我希望它不是抽象的,但你有什么想法吗?

提前谢谢。

共有1个答案

郑锦
2023-03-14
def select_nodes_by_label(G, lab):
    return [node[0] for node in G.nodes(data='label') if node[1] == lab ]

这返回一个节点列表,我们可以使用它来获得所有组合的最短路径。

from itertools import combinations

def avg_shortest_path_labeled_node(G, lab):
    sel_nodes = select_nodes_by_label(G,lab)
    V_m = len(sel_nodes)

    # collect all lengths of shortest paths from combinations of labeled nodes 
    sp_len = [len(nx.shortest_path(G,c[0], c[1]))  for c in combinations(sel_nodes,2)]
    n = len(sp_len)
    return sum(sp_len)/(n) * 1/(V_m * (V_m - 1))
avg_shortest_path_labeled_node(G,'A')

[out]:

1.5

这是你期望的结果吗?在更复杂的图形上测试此函数可能会很有趣。

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

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

  • 我有一个人际网络。我可以通过使用Networkx创建有向图来显示它们的连接方式。 下面是一个代码示例: 我还可以计算两个节点之间的最短路径。然而,我坚持的是如何强调这条“最短路径”。任何指点都将不胜感激。顺便说一句,我是个新手

  • 在OSMnx中,街道的定向是为了保持单向性,因此,当我尝试使用Networkx查找最短路径时,我得到NetworkXNoPath:No path to(osmid)。如何解决此问题?我需要在具有单向街道的网络中找到最短路径。 见下面的代码:

  • 我有一个邻接矩阵(作为一个数据帧),每个单元都有从a到B的概率 行是“从”,列是“到”。每行的总和是1.0。 我已经建立了一个网络图,现在概率是图的“权重”。 我试图找到最可能的路径——即权重的乘积是最低的,而不是总和。知道networkx的最短路径查找i项最优路径的权重之和。如何根据最优产品找到最优路径? 编辑:输入是图G、节点“源”和节点“目标”,为简单起见,它们确实通过多条路径连接。我想在G

  • 以下是消费税: 在某些图的问题中,顶点可以有权代替边的权或增加边的权。设Cv是顶点v的代价,C(x,y)是边(x,y)的代价。该问题涉及到在图G中寻找顶点a和顶点b之间的最便宜路径,路径的代价是该路径上遇到的边和顶点的代价之和。 (a)假设图中每条边的权重为零(而非边的代价为∞),假设所有顶点1≤V≤n(即所有顶点的代价相同),Cv=1。给出一个求从a到b最便宜路径的高效算法及其时间复杂度。 (b