我试图通过以下方式以矩阵形式存储来自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
边缘,这种方式非常慢。他们是更快的方式来做到这一点。
答案 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()
的核心算法。因此,您可能必须自己实现更高效的算法版本。