首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将顶点及其各自的边(全部/输入/输出)从有向图g复制到新的有向图g1?

如何将顶点及其各自的边(全部/输入/输出)从有向图g复制到新的有向图g1?
EN

Stack Overflow用户
提问于 2012-03-14 23:36:39
回答 1查看 806关注 0票数 0

图中有没有一个方法或类可以快速有效地完成这个过程?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-17 18:58:23

让我们假设您的图是g格式的,而要使用的顶点集是sampled格式(这是一个由从零开始的顶点ID组成的向量)。

首先,我们选择至少有一个端点在sampled中的边集

代码语言:javascript
复制
all.vertices <- (1:vcount(g)) - 1
es <- E(g) [ sampled %--% 1:n ]

es现在是一个由感兴趣的边组成的“边序列”对象。接下来,我们获取图的边列表(这是一个m x 2矩阵),并选择与边相对应的行:

代码语言:javascript
复制
el <- get.edgelist(g)[as.vector(es)+1]

在这里,as.vector(es)将边缘序列转换为由边缘序列中的边缘的边缘it组成的向量,并使用它来选择边缘列表的适当子集。请注意,我们必须在边ID上加1,因为R向量是从1开始索引的,而图的边ID是从零开始的。

接下来,我们从边缘列表构造结果:

代码语言:javascript
复制
g1 <- graph(el, vcount(g), directed=is.directed(g))

请注意,g1将包含与g相同数量的顶点。可以采用由采样顶点组成的子图,如下所示:

代码语言:javascript
复制
g1 <- subgraph(g1, sampled)

0.6及以上版本的用户注意: igraph 0.6将切换到基于1的索引,而不是基于0的索引,因此不需要从all.vertices中减去1,也不需要在as.vector(es)中添加1。此外,igraph 0.6将包含一个名为subgraph.edges的函数,因此可以简单地使用以下代码:

代码语言:javascript
复制
g1 <- subgraph.edges(g, es)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9705035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档