紧密中心性(closeness centrality)

closeness centrality:某个节点到达其他节点的难易程度,也就是到其他所有结点距离的平均值的倒数。

公式:


例题及实现 :


from igraph import Graph as IGraph

f = open('/Users/tangweize/Desktop/net.data')
edges = []
for line in f.readlines():
   u, v = [i for i in line.strip().split(',')]
   edges.append((u, v))

print(edges)
''''[('1', '2'), ('1', '3'), ('2', '3'), ('3', '7'), ('4', '5'), ('4', '6'), ('5', '6'),
('6', '7'), ('7', '8'), ('8', '9'), ('9', '10'), ('9', '11'), 
('10', '11'), ('8', '12'), ('12', '13'), ('12', '14'), ('13', '14')]'''

f.close()
g = IGraph.TupleList(edges, directed=False, vertex_name_attr='name')

path = g.get_shortest_paths("7")
names = g.vs['name']

cc = 0;
for p in path:
    cc += len(p) + 1

print("closeness centrality = ", (len(path)-1)/float(cc))




或者直接调用igraph里面的closeness

from igraph import Graph as IGraph

f = open('/Users/tangweize/Desktop/net.data')
edges = []
for line in f.readlines():
   u, v = [i for i in line.strip().split(',')]
   edges.append((u, v))

print(edges)
''''[('1', '2'), ('1', '3'), ('2', '3'), ('3', '7'), ('4', '5'), ('4', '6'), ('5', '6'),
('6', '7'), ('7', '8'), ('8', '9'), ('9', '10'), ('9', '11'),
('10', '11'), ('8', '12'), ('12', '13'), ('12', '14'), ('13', '14')]'''

f.close()
g = IGraph.TupleList(edges, directed=False, vertex_name_attr='name')

ccvs = []
for p in zip(g.vs, g.closeness()):
    ccvs.append({"name" :p[0]["name"], "cc":p[1]})

sorted(ccvs, lambda k:k["cc"], reversed = True)[:10]










  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
紧密中心性是用于衡量节点在图中的重要性的指标,它是指节点与其他节点之间最短路径的平均长度的倒数。 下面是一个简单的 C 语言实现: ```c #include <stdio.h> #include <stdlib.h> #include <limits.h> #define INF INT_MAX #define N 5 int graph[N][N] = { {0, 1, INF, 1, INF}, {1, 0, 1, INF, INF}, {INF, 1, 0, 1, INF}, {1, INF, 1, 0, 1}, {INF, INF, INF, 1, 0} }; double closeness_centrality(int node) { int i, j, sum = 0, shortest_path, reachable_count = 0; double closeness; int dist[N] = { 0 }; for (i = 0; i < N; i++) { dist[i] = INF; } dist[node] = 0; for (i = 0; i < N; i++) { shortest_path = INF; for (j = 0; j < N; j++) { if (dist[j] < shortest_path && dist[j] != -1) { shortest_path = dist[j]; node = j; } } for (j = 0; j < N; j++) { if (graph[node][j] > 0 && dist[node] + graph[node][j] < dist[j]) { dist[j] = dist[node] + graph[node][j]; } } dist[node] = -1; } for (i = 0; i < N; i++) { if (dist[i] != INF && i != node) { sum += dist[i]; reachable_count++; } } closeness = (double)(reachable_count - 1) / sum; return closeness; } int main() { int i; double cc[N]; for (i = 0; i < N; i++) { cc[i] = closeness_centrality(i); printf("Node %d has closeness centrality: %f\n", i, cc[i]); } return 0; } ``` 这个示例程序计算了一个大小为 5 的图的紧密中心性,其中每个节点都被编号为 0 到 4。图的邻接矩阵被硬编码到程序中,其中 INF 表示两个节点之间没有边。该程序输出每个节点的紧密中心性

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值