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

我想征求关于如何保留两个用户定义节点的建议:例如
retain_node_ids = [1,2]编辑:
我可以像下面建议的那样使用remove_nodes_from。但是,如果删除度<2时的节点,则可能会出现原来具有度>=2、度<2时的新节点。为了重复这一过程,直到没有找到度<2的节点时,使用了k-core。
发布于 2020-07-12 11:23:46
以下是您可以这样做的方法:
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核,然后去掉它们:
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])


https://stackoverflow.com/questions/62856781
复制相似问题