我想计算标记图中具有相同标签的节点的平均最短路径。例如,红色标记为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”的位置。因此,我可以关注具有相同标签的节点。我希望它不是抽象的,但你有什么想法吗?
提前谢谢。
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