我正在尝试对杜威十进制分类进行一些图表分析,以便我可以在两本书之间建立距离。 DDC有几个关系:“层次结构”,“看也”,“类别 - 其他”,这里我用不同的颜色代表它们。由于这些关系不对称,您会注意到我们有一个有向图。下面是距离394.1最远4个边的所有顶点图的图片。
分类A和B之间的距离度量应该是A和B之间的最短路径。但是颜色没有固有的加权值或偏好。但是用户会提供一个。所以给出一个权重字典,例如:
weights_dict_test = {'notational_hiearchy':1,
'see_reference':0.5,
'class_elsewhere':2}
我想返回加权最短路径。我认为如果我可以预处理两个节点之间的所有简单路径,然后在给定权重dict的情况下找到最短的路径,那就不会有问题了。但是,由于该图包含> 50,000个节点。计算24小时后,计算nx.all_simple_paths(G, a, b)
尚未返回。是否有任何关于并行查找all_simple_paths
的建议。或者计算给定weights_dict
不涉及计算all_simple_paths
的最短路径的技术?
答案 0 :(得分:0)
感谢@CorleyBrigman。解决方案是从W
创建一个新的图表G
,用您想要的权重替换G
的颜色。然后,您可以有效地使用nx.shortest_path
和nx.shortest_path_length
及其通常较快的运行时。
In [23]:
def update_weights(G, weights_dict):
W = nx.DiGraph()
for m in G.nodes():
for n in G[m].iterkeys():
relation = G[m][n]['rel']
weight = weights_dict[relation]
W.add_edge(m, n, rel=weights_dict[relation])
return W
In [41]:
weights_dict_test = {'notational_hiearchy':50,
'see_reference':0.6,
'class_elsewhere':1}
In [42]:
W = update_weights(G, weights_dict_test)
In [43]:
print len(W)
print len(G)
43241
43241
In [45]:
nx.shortest_path_length(W, '394.1', '341.33',weight='rel')
Out[45]:
52.2