Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Networkx在Python中计算图中每个节点的聚类系数_Python_Cluster Analysis_Networkx - Fatal编程技术网

如何使用Networkx在Python中计算图中每个节点的聚类系数

如何使用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():

我想使用python和Networkx函数计算图中每个节点的聚类系数。我知道可能有一个内置函数用于此目的,但我想自己计算,但我的代码不起作用。有人能指出错误吗

我试着测试和调试代码。每个节点的邻居数,即n_邻居的计算似乎正常,但下一个代码不知何故没有运行,或者有一些我无法检测到的错误

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我错了