如何使用Networkx在Python中计算图中每个节点的聚类系数
我想使用python和Networkx函数计算图中每个节点的聚类系数。我知道可能有一个内置函数用于此目的,但我想自己计算,但我的代码不起作用。有人能指出错误吗 我试着测试和调试代码。每个节点的邻居数,即n_邻居的计算似乎正常,但下一个代码不知何故没有运行,或者有一些我无法检测到的错误如何使用Networkx在Python中计算图中每个节点的聚类系数,python,cluster-analysis,networkx,Python,Cluster Analysis,Networkx,我想使用python和Networkx函数计算图中每个节点的聚类系数。我知道可能有一个内置函数用于此目的,但我想自己计算,但我的代码不起作用。有人能指出错误吗 我试着测试和调试代码。每个节点的邻居数,即n_邻居的计算似乎正常,但下一个代码不知何故没有运行,或者有一些我无法检测到的错误 import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np for node in network.nodes():
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
for node in network.nodes():
neighbours=nx.neighbors(network,node)
count=0
for n in neighbours:
count+=1
n_neighbors=count
n_links=0
if n_neighbors>1:
for node1 in neighbours:
for node2 in neighbours:
if nx.has_edge(node1,node2):
n_links+=1
n_links/+2 #because n_links is calculated twice
clustering_coefficient=n_links/(0.5*n_neighbors*(n_neighbors-1))
print(clustering_coefficient)
else:
print(0)
您应该注意,邻居是一个迭代器。这意味着,在第一次迭代之后,您不再需要对其进行迭代。当在Neights中为node1输入行
时:
Neights为空,您永远无法到达循环的内部。请参阅该功能的文档
此外,请注意,n\u links/+2
不会更改n\u links的值。它应该是n\u links/=2
nx.has_edge(node1,node2)
应该可以在图形上使用
关于逻辑-你应该把线移到除以2的地方。您应该在计算完邻居之间的所有连接后再进行计算,或者在每次找到边时只添加0.5
更改这些内容后,您将获得:
for node in network.nodes():
neighbours=[n for n in nx.neighbors(network,node)]
n_neighbors=len(neighbours)
n_links=0
if n_neighbors>1:
for node1 in neighbours:
for node2 in neighbours:
if network.has_edge(node1,node2):
n_links+=1
n_links/=2 #because n_links is calculated twice
clustering_coefficient=n_links/(0.5*n_neighbors*(n_neighbors-1))
print(clustering_coefficient)
else:
print(0)
你是想用:n_links/+2还是n_links/=2?@michalyanko n_links/=2我错了