如何使用R语言igraph构建网络的度相关边计数矩阵
度关联计数矩阵极简实现方案
你需要的度-度边计数矩阵可以通过提取边端点度属性+交叉统计的方式快速实现,无需嵌套循环,代码更简洁、大网络下的计算效率也更高:
library(igraph) g <- make_graph("Zachary") # 获取所有边两端节点的度 edge_degree_pair <- cbind( degree(g, head_of(g, E(g))), degree(g, tail_of(g, E(g))) ) # 按度的唯一取值做交叉计数 deg_levels <- sort(unique(degree(g))) m <- table( factor(edge_degree_pair[,1], levels = deg_levels), factor(edge_degree_pair[,2], levels = deg_levels) ) # 无向图对称修正:边的首尾顺序不影响计数,合并双向统计结果 m <- m + t(m) diag(m) <- diag(m) / 2 # 输出结果与你的实现完全一致 print(m)
实现说明
- 核心逻辑是直接遍历所有边提取两端节点度属性,用
table函数做交叉统计,计算复杂度仅与网络边数正相关,远高于原实现中遍历所有度组合查询边数的方案 - 上述代码针对无向图做了对称修正,如果你处理的是有向图,不需要加最后两行的对称处理,行对应源节点度、列对应目标节点度即可
- 如果需要得到概率矩阵,直接将矩阵所有元素除以总边数即可
内容的提问来源于stack exchange,提问作者avgoustisw
相关产品推荐
相关产品推荐

