Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何在graph tool中有效地计算图形的平均路径长度?_Python 3.x_Graph_Graph Tool - Fatal编程技术网

Python 3.x 如何在graph tool中有效地计算图形的平均路径长度?

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.

我处理的是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.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])

我还没试过这个,但这个应该有用

对。我已经实现了这一点,但只是为了避免复杂化而没有显示出来。这使时间减少了原来的一半,但并没有大幅度减少。请参阅我的上一次编辑。恐怕除了优化
最短距离
:即:不要使用该库(除非它已经是本机的!),请自己“内联”完成:避免参数传递和函数调用。你能试着编辑你的文章来显示这个功能的内部吗?没错。我已经实现了这一点,但只是为了避免复杂化而没有显示出来。这使时间减少了原来的一半,但并没有大幅度减少。请参阅我的上一次编辑。恐怕除了优化
最短距离
:即:不要使用该库(除非它已经是本机的!),请自己“内联”完成:避免参数传递和函数调用。你能试着编辑你的文章来显示这个功能的内部吗?