首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Networkx中使用k核时保留特定节点

在Networkx中使用k核时保留特定节点
EN

Stack Overflow用户
提问于 2020-07-12 03:30:34
回答 1查看 202关注 0票数 2

我有一个使用Netwrokx创建的随机图,并且我想删除度小于2的节点,只有两个用户定义的节点的度= 1。要删除所有度<2的节点,我可以使用Networkx的k-core。但我不知道如何保留两个用户定义的节点。例如,下面的代码生成,

代码语言:javascript
复制
import networkx as nx
import matplotlib.pyplot as plt

# fig 1
G = nx.gnm_random_graph(n=20, m=30, seed=1)
nx.draw(G, with_labels=True, pos=nx.spring_layout(G))
plt.show()

G = nx.k_core(G, k=2)
nx.draw(G, with_labels=True, pos=nx.spring_layout(G))
plt.show()

图1:

图2:

我想征求关于如何保留两个用户定义节点的建议:例如

代码语言:javascript
复制
retain_node_ids = [1,2]

编辑:

我可以像下面建议的那样使用remove_nodes_from。但是,如果删除度<2时的节点,则可能会出现原来具有度>=2、度<2时的新节点。为了重复这一过程,直到没有找到度<2的节点时,使用了k-core

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-12 11:23:46

以下是您可以这样做的方法:

代码语言:javascript
复制
degrees = nx.classes.degree(G)
G.remove_nodes_from([node
                     for node in G.nodes
                     if node not in retain_node_ids and degrees[node] <= 2])

当然,这段代码没有找到最大子图(正如k_core函数所做的那样):它只需删除所有度小于或等于2且不在retain_node_ids列表中的节点。

编辑:您可以添加两个假节点,连接节点以保留它们,计算k核,然后去掉它们:

代码语言:javascript
复制
G.add_edges_from([(u, v) for u in retain_node_ids for v in (n, n+1)])
G = nx.k_core(G, k=2)
G.remove_nodes_from([n, n+1])

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62856781

复制
相关文章

相似问题

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