Создание ориентированного графа из неориентированного графа с помощью dfs_tree, но с сохранением атрибутов - PullRequest
1 голос
/ 18 марта 2020

Я хочу принудительно направить неориентированный граф в ориентированный граф, используя указанный c узел в качестве root. Я могу сделать это, используя dfs_tree():

G = nx.Graph([(0, 1, {"color": "red"}), (1, 2, {"color": "blue"}), (3, 2, {"color": "green"})])
DG = nx.dfs_tree(G, 0)

Но проблема в том, что атрибуты теряются в процессе:

DG.edges(data=True)

OutEdgeDataView([(0, 1, {}), (1, 2, {}), (2, 3, {})])

Есть ли другой способ сделать это, где ты не теряешь атрибуты? Или мне нужно отобразить их обратно вручную?

1 Ответ

1 голос
/ 18 марта 2020

Если у вас достаточно памяти, вы можете сначала создать DiGraph со всеми ребрами, а затем удалить все, кроме dfs_edges. Это сохранит всю информацию об атрибутах. Кроме того, вы можете выполнить итерацию по dfs_edges и получить информацию о ребре, чтобы добавить ребро и метку в ориентированный граф.

import networkx as nx

G = nx.Graph([(0, 1, {"color": "red"}), (1, 2, {"color": "blue"}), (3, 2, {"color": "green"})])
DG = nx.DiGraph(G)

DG.remove_edges_from(DG.edges - nx.dfs_edges(G, 0))

print(DG.edges(data=True))
# [(0, 1, {'color': 'red'}), (1, 2, {'color': 'blue'}), (2, 3, {'color': 'green'})]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...