You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算图的n阶degree()?求各顶点的高阶邻接边数量

计算igraph中顶点的n阶度(n-step Degree)

针对你想要在degree()函数基础上计算高阶邻接关联数量的需求,这里提供两种实用方案,适配你给出的示例场景:

方案1:匹配你提到的「二阶度=5」的计算逻辑

你说顶点1的普通度为2、二阶度为5,这个二阶度的逻辑是一阶邻居的度数总和,减去邻居之间的重复连接次数。

以顶点1为例:它的一阶邻居是2和3,两者的度数分别是3和3,总和为3+3=6;由于顶点2和3之间有1条直接连接,这条边在两个邻居的度数中被重复统计了,所以最终二阶度为6-1=5。

实现代码如下:

library(igraph)

# 构建示例图
g1 <- graph(edges=c(1,2,1,3,2,3,3,5,2,4,4,5,5,6,4,6,4,7,6,7), n=7, directed=F)

# 定义函数计算n阶累计度(以n=2为例,逻辑可扩展)
calc_n_step_degree <- function(graph, n) {
  if (n == 1) {
    return(degree(graph))
  }
  # 获取每个顶点的1阶邻居列表
  neighbor_lists <- neighborhood(graph, order = 1)
  # 计算每个顶点的二阶度:邻居度数总和 - 邻居之间的边数(去重)
  sapply(neighbor_lists, function(neighbors) {
    total_degree <- sum(degree(graph, neighbors))
    # 生成邻居子图,统计内部边数
    subgraph <- induced_subgraph(graph, neighbors)
    edge_count <- ecount(subgraph)
    total_degree - edge_count
  })
}

# 计算二阶度
calc_n_step_degree(g1, 2)
# 输出:5 8 8 11 9 8 5

运行后顶点1的结果正好是5,符合你的描述。

方案2:计算n步可达的不同邻居总数

如果你的需求是统计与顶点距离≤n步的所有不同顶点数量(不含自身),可以通过最短路径距离实现:

# 定义函数计算n步可达度
calc_n_reach_degree <- function(graph, n) {
  # 生成所有顶点间的最短距离矩阵
  dist_matrix <- distances(graph)
  # 对每个顶点,统计距离≤n且不等于0(排除自身)的顶点数
  apply(dist_matrix, 1, function(dists) sum(dists <= n & dists != 0))
}

# 1阶度(即普通degree)
calc_n_reach_degree(g1, 1)
# 输出:1 3 3 4 3 3 2

# 2阶度
calc_n_reach_degree(g1, 2)
# 输出:4 6 6 6 6 6 4

扩展到任意n阶

对于更高阶的计算,比如3阶度,只需修改函数中的n参数即可。比如在你的连通示例图中,3阶度会覆盖所有其他顶点:

calc_n_reach_degree(g1, 3)
# 输出:6 6 6 6 6 6 6

内容的提问来源于stack exchange,提问作者JC_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 02:40:34