Я думаю, что вы после этого однострочника:
G= nx.k_core(G,k=2)
Вы должны знать, что если вы удалите некоторые узлы, у вас появятся новые узлы, степень которых равна 1 или 0. Если вы хотите повторить этот процесс до тех пор, пока такие узлы не будут существовать, вы генерируете «k -коре "с k = 2. То есть вы генерируете самую большую сеть, для которой все узлы имеют степень по крайней мере, 2. Это встроенная функция:
import networkx as nx
G = nx.fast_gnp_random_graph(10000,0.0004) #erdos renyi graph, average degree = 4
G = nx.k_core(G,k=2)
Наконец, вы могли бы сделать:
for node in G.nodes():
if G.degree(node)<2:
G.remove_node(node)
но это даст другой результат из 2-ядерного я, описанного выше, и другой результат от A Martelli, так как некоторые из более поздних узлов в списке могут первоначально иметь степень 2, но быть уменьшены до 1, прежде чем вы их достигнете. И это не будет столь же чист, потому что он создает список G.nodes()
, а не с помощью более хороший итератора (если вы не изменяя график в цикле, обычно лучше перебрать узлы с G.nodes_iter()
, а не G.nodes()
)
Вас беспокоит, могут ли теперь оставшиеся узлы после удаления иметь степень 0 или 1? – Joel
Другой вопрос: хотите ли вы фактически удалить их из сети или просто не включать их в чертеж? – Joel