Python 3.x 如何在graph tool中有效地计算图形的平均路径长度?
我处理的是10000个顶点的网络,我用它来分析它们。我想为每个图计算的一件事是平均路径长度,它被定义为图中所有节点对上的最短距离的平均值。所以我试了一下:Python 3.x 如何在graph tool中有效地计算图形的平均路径长度?,python-3.x,graph,graph-tool,Python 3.x,Graph,Graph Tool,我处理的是10000个顶点的网络,我用它来分析它们。我想为每个图计算的一件事是平均路径长度,它被定义为图中所有节点对上的最短距离的平均值。所以我试了一下: ave_path_length = 0 tot = 0 for v1 in G.vertices(): print(v1) for v2 in G.vertices(): if v1 != v2 : tot += 1 ave_path_length += gt.
ave_path_length = 0
tot = 0
for v1 in G.vertices():
print(v1)
for v2 in G.vertices():
if v1 != v2 :
tot += 1
ave_path_length += gt.shortest_distance(G, v1, v2)
ave_path_length /= tot
然而,这是永恒的。有没有更好的方法来完成这项任务?提前感谢。您可以使用
距离(v1,v2)=距离(v2,v1)
这一事实将时间缩短2。因此,只计算值的一半(也可以除以一半,但这是自动处理的)
除此之外,您还可以避免计算tot:
tot = (len(vert)-1)*(len(vert)-2)//2
通过使用
距离(v1,v2)=距离(v2,v1)
,可以将时间缩短2。因此,只计算值的一半(也可以除以一半,但这是自动处理的)
除此之外,您还可以避免计算tot:
tot = (len(vert)-1)*(len(vert)-2)//2
我找到了一个非常有效的方法来实现这一点。我们可以这样做:
import graph_tool.all as gt
dist = gt.shortest_distance(G)
ave_path_length = sum([sum(i) for i in dist])/(G.num_vertices()**2-num_vertices())
对于大小为10000的稀疏网络,这只需要几秒钟。然而,我仍然好奇是否存在更好的方法 我找到了一个非常有效的方法来实现这一点。我们可以这样做:
import graph_tool.all as gt
dist = gt.shortest_distance(G)
ave_path_length = sum([sum(i) for i in dist])/(G.num_vertices()**2-num_vertices())
对于大小为10000的稀疏网络,这只需要几秒钟。然而,我仍然好奇是否存在更好的方法 你能做什么
all_sp = gt.shortest_distance(G)
vertex_avgs = graph_tool.stats.vertex_average(G, all_sp)
avg_path = numpy.mean(vertex_avgs[0])
我还没试过这个,但这个应该有用 你能做什么
all_sp = gt.shortest_distance(G)
vertex_avgs = graph_tool.stats.vertex_average(G, all_sp)
avg_path = numpy.mean(vertex_avgs[0])
我还没试过这个,但这个应该有用 对。我已经实现了这一点,但只是为了避免复杂化而没有显示出来。这使时间减少了原来的一半,但并没有大幅度减少。请参阅我的上一次编辑。恐怕除了优化
最短距离
:即:不要使用该库(除非它已经是本机的!),请自己“内联”完成:避免参数传递和函数调用。你能试着编辑你的文章来显示这个功能的内部吗?没错。我已经实现了这一点,但只是为了避免复杂化而没有显示出来。这使时间减少了原来的一半,但并没有大幅度减少。请参阅我的上一次编辑。恐怕除了优化最短距离
:即:不要使用该库(除非它已经是本机的!),请自己“内联”完成:避免参数传递和函数调用。你能试着编辑你的文章来显示这个功能的内部吗?