擅长:python、mysql、java
<p>因为您使用的是numpy,所以可以真正减少对算法中每个操作进行迭代的需求。我的numpy和向量化fu并不是最棒的,但是下面的代码在一个有大约13000个节点的图上运行大约2.5秒:</p>
<pre><code>def adar_adamic(adj_mat):
"""Computes Adar-Adamic similarity matrix for an adjacency matrix"""
Adar_Adamic = np.zeros(adj_mat.shape)
for i in adj_mat:
AdjList = i.nonzero()[0] #column indices with nonzero values
k_deg = len(AdjList)
d = np.log(1.0/k_deg) # row i's AA score
#add i's score to the neighbor's entry
for i in xrange(len(AdjList)):
for j in xrange(len(AdjList)):
if AdjList[i] != AdjList[j]:
cell = (AdjList[i],AdjList[j])
Adar_Adamic[cell] = Adar_Adamic[cell] + d
return Adar_Adamic
</code></pre>
<p>与MBo的回答不同,这确实构建了完整的对称矩阵,但考虑到执行时间,效率低下(对我来说)是可以忍受的。在</p>