如何基于给定顶点集采样二分图(替代sample_bipartite(n1,n2,p))
基于已有顶点集生成跨组二分边的正确实现
你当前代码的问题在于sample_bipartite(g_n[1], g_n[2], p = p[1,2])会生成全新的顶点集,和之前gw1、gw2的顶点没有关联,合并后其实是把两组独立的顶点拼在了一起,这不符合你“利用已有顶点集采样二分图”的需求。
下面是直接复用gw1、gw2顶点集的正确实现:
# 先合并两个组内图,得到包含所有目标顶点的基础图 gw_combined <- gw1 + gw2 # 获取两组顶点的ID:gw1的顶点是1到n1,gw2的顶点是(n1+1)到(n1+n2) # (如果你的gw1/gw2顶点ID不是连续的,改用V(gw1)$name或自定义ID) vertices_group1 <- V(gw1) vertices_group2 <- V(gw2) # 生成两组顶点之间所有可能的边对 all_possible_edges <- expand.grid(from = vertices_group1, to = vertices_group2) # 按照概率p12随机采样边 sampled_edges <- all_possible_edges[sample(nrow(all_possible_edges), size = floor(nrow(all_possible_edges)*p[1,2])), ] # 将采样到的边添加到合并后的图中,并设置边属性 gw_combined <- add_edges(gw_combined, as.vector(t(sampled_edges))) # 给新增的跨组边设置group属性 E(gw_combined)[E(gw_combined) %in% E(add_edges(make_empty_graph(), as.vector(t(sampled_edges))))]$group <- 12
关键说明:
- 直接复用
gw1和gw2的顶点对象,确保边是连接在已有顶点上的,而非新生成的顶点 - 通过
expand.grid生成所有跨组顶点对,再按概率采样,完全对应sample_bipartite的随机边逻辑 - 最后统一给跨组边标记
group=12,和你原来的组内边属性保持一致
如果你的gw1或gw2顶点ID不是默认的连续整数(比如自定义了顶点名称),只需把vertices_group1和vertices_group2替换为对应的顶点标识即可,比如V(gw1)$name。
内容的提问来源于stack exchange,提问作者Anum Fatima
相关产品推荐
相关产品推荐

