Сохранение определенных c узлов при использовании k-core в Networkx - PullRequest
1 голос
/ 12 июля 2020

У меня случайный граф, созданный с помощью Netwrokx, и я хочу удалить узлы со степенью меньше 2, за исключением двух определяемых пользователем узлов, которые имеют степень = 1. Чтобы удалить все узлы со степенью <2, я мог бы использовать Networkx <code>k-core. Но я не уверен, как сохранить 2 пользовательских узла. Например, следующий код генерирует

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:

enter image description here

Figure 2:

введите описание изображения здесь

Я хотел бы попросить совета, как сохранить 2 определяемых пользователем узла: например,

retain_node_ids = [1,2]

РЕДАКТИРОВАТЬ:

Я мог бы использовать remove_nodes_from как предложено ниже. Но если мы удалим узлы со степенью <2, мы можем получить новые узлы, которые изначально имели степень> = 2, со степенью <2. Чтобы повторять процесс до тех пор, пока не будут найдены узлы со степенью <2, используется <code>k-core.

1 Ответ

1 голос
/ 12 июля 2020

Вот как вы можете это сделать:

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-core, а затем избавиться от них:

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])

Figure 1 фигура 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...