Я хочу принудительно преобразовать неориентированный граф в ориентированный граф, используя определенный узел в качестве корня. Я могу сделать это, используя 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, {})])
Есть ли другой способ сделать это, чтобы не потерять атрибуты? Или мне нужно вручную отображать их?
Если у вас достаточно памяти, вы можете сначала создать объект 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'})]
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras