请写出任意两个节点之间的SimRank算法的代码
时间: 2023-03-11 19:48:44 浏览: 55
SimRank算法的代码如下:def simrank(G, r = 0.8, max_iter = 100):
# 提取出图G中的节点
nodes = G.nodes()
# 初始化所有节点之间的相似度为1
sim_prev = dict([(n1, dict([(n2, 1.0) for n2 in nodes])) for n1 in nodes])
for i in range(max_iter):
# 计算每对节点间的simrank
sim = dict([(n1, dict([(n2, 0.0) for n2 in nodes])) for n1 in nodes])
for n1 in nodes:
for n2 in nodes:
if n1 == n2:
continue
s1 = G.neighbors(n1)
s2 = G.neighbors(n2)
if len(s1) == 0 or len(s2) == 0:
continue
sim[n1][n2] = sum([sim_prev[n1][sn1] * sim_prev[sn2][n2] for sn1 in s1 for sn2 in s2]) / (len(s1) * len(s2))
sim[n1][n1] = 1.0
# 将当前的simrank值保存
sim_prev = sim
return sim