提交 43081e4a 编写于 作者: W wizardforcel

3.5

上级 c87e91f0
......@@ -141,3 +141,66 @@ def rewire(G, p):
这个函数不按照 Watts 和 Strogatz 指定的顺序考虑边缘,但它似乎不会影响结果。
图(?)展示了`n = 20``k = 4`和范围内`p`值的 WS 图。当`p = 0`时,该图是环格。 当`p = 1`时,它是完全随机的。我们将看到,有趣的事情发生在两者之间。
## 3.5 群聚性
下一步是计算群聚系数,它量化了节点形成集团的趋势。 集团是一组完全连接的节点;也就是说,在集团中的所有节点对之间都存在边。
假设一个特定的节点`u`具有`k`个邻居。如果所有的邻居都相互连接,则会有`k(k-1)/2`个边。 实际存在的这些边的比例是`u`的局部群聚系数,表示为`Cu`。它被称为“系数”,因为它总是在 0 和 1 之间。
如果我们计算所有节点上的`Cu`平均值,我们得到“网络平均群聚系数”,表示为`C`
这是一个计算它的函数。
```py
def node_clustering(G, u):
neighbors = G[u]
k = len(neighbors)
if k < 2:
return 0
total = k * (k-1) / 2
exist = 0
for v, w in all_pairs(neighbors):
if G.has_edge(v, w):
exist +=1
return exist / total
```
同样,我使用`G [u]`,它返回一个字典,键是节点的邻居。如果节点的邻居少于两个,则群聚系数未定义,但为简便起见,`node_clustering`返回 0。
否则,我们计算邻居之间的可能的边数量,`total`,然后计算实际存在的边数量。结果是存在的所有边的比例。
我们可以这样测试函数:
```py
>>> lattice = make_ring_lattice(10, 4)
>>> node_clustering(lattice, 1)
0.5
```
`k=4`的环格中,每个节点的群聚系数是`0.5`(如果你不相信,可以看看图(?))。
现在我们可以像这样计算网络平均群聚系数:
```py
def clustering_coefficient(G):
cc = np.mean([node_clustering(G, node) for node in G])
return cc
```
`np.mean` 是个 NumPy 函数,计算列表或数组中元素的均值。
然后我们可以像这样测试:
```py
>>> clustering_coefficient(lattice)
0.5
```
这个图中,所有节点的局部群聚系数是 0.5,所以节点的平均值是 0.5。当然,我们期望这个值和 WS 图不同。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册