使用networkx以矩阵形式存储链接预测分数

时间:2018-03-13 17:20:03

标签: networkx adjacency-matrix

我试图通过以下方式以矩阵形式存储来自networkx的adamic adar链接预测分数。

G = nx.Graph()
G.add_edges_from([('a','b'),('b','c'),('a','d'),('c','d'),('b','d')])
preds = nx.adamic_adar_index(G, ebunch = G.edges())

B = nx.Graph()
for u,v,p in preds:
   B.add_edge(u,v,weight=p)

Adj_mat = nx.to_scipy_sparse_matrix(B)

但是对于2,858,219边缘,这种方式非常慢。他们是更快的方式来做到这一点。

1 个答案:

答案 0 :(得分:0)

分析作业

您可以使用python cProfiler来观察工作中的瓶颈:

cProfile.run('''
G = nx.complete_graph(100)
preds = nx.adamic_adar_index(G, ebunch = G.edges())

B = nx.Graph()
for u,v,p in preds:
   B.add_edge(u,v,weight=p)

Adj_mat = nx.to_scipy_sparse_matrix(B)
''')

分析

通过此分析,您可以发现link_prediction.py:199(predict)花费了大部分时间,这是adamic_adar_index()的核心算法。因此,您可能必须自己实现更高效的算法版本。