igraph 中是否有方法或类可以快速有效地执行此过程?
问问题
816 次
1 回答
3
假设您的图形在g
其中,并且要使用的顶点集在sampled
其中(这是一个由从零开始的顶点 ID 组成的向量)。
首先,我们选择至少一个端点位于的边集sampled
:
all.vertices <- (1:vcount(g)) - 1
es <- E(g) [ sampled %--% 1:n ]
es
现在是一个“边缘序列”对象,由感兴趣的边缘组成。接下来,我们获取图的边列表(这是一个 mx 2 矩阵)并选择与边对应的行:
el <- get.edgelist(g)[as.vector(es)+1]
这里,as.vector(es)
将边序列转换为由边序列中边的边 ID 组成的向量,并使用它来选择边列表的适当子集。请注意,我们必须将 1 添加到边 ID,因为 R 向量从 1 开始索引,但 igraph 边 ID 从零开始。
接下来,我们从边缘列表构造结果:
g1 <- graph(el, vcount(g), directed=is.directed(g))
请注意,g1
它将包含与 一样多的顶点g
。您可以按如下方式获取由采样顶点组成的子图:
g1 <- subgraph(g1, sampled)
igraph 0.6 及更高版本的用户注意:igraph 0.6 将切换到基于 1 的索引,而不是基于 0 的索引,因此无需从中减去 1 all.vertices
,也无需将 1 添加到as.vector(es)
. 此外,igraph 0.6 将包含一个名为 的函数subgraph.edges
,因此可以简单地使用它:
g1 <- subgraph.edges(g, es)
于 2012-03-17T10:58:23.047 回答