[英]fix an ordering of the edges in an undirected networkx graph
在無向的NetworkX圖中,邊表示為Python元組。 他們的訂購取決於您要求他們的方式。 這是我指的一個小例子:
import networkx as nx
g = nx.complete_bipartite_graph(2,2)
print(g.edges())
print(g.edges(2))
輸出是
[(0, 2), (0, 3), (1, 2), (1, 3)]
[(2, 0), (2, 1)]
有沒有一種方法(不涉及手動排序)來避免對邊緣使用不同的表示形式?
我不確定您想要什么,因為在標題中您要求有序邊緣,但是在您的示例中您要求有序邊緣節點。 在我的示例中,我展示了兩者的排序。 請注意,我使用列表some_edges
來創建新的邊列表-原始邊列表( some_edges
)保持不變。
首先,如何在邊列表中對節點的單個元組進行排序。 也就是說,邊的順序相同,但是其中的節點已排序。
import networkx as nx
g = nx.Graph()
g.add_edges_from([
(5, 2),
(2, 1),
(3, 2),
(4, 2)
])
some_edges = g.edges(2)
print("Not sorted: ", some_edges)
print("SORTED")
# sort nodes in edges
some_edges_1 = [tuple(sorted(edge)) for edge in some_edges]
print("Sorted nodes:", some_edges_1)
現在如何在邊列表中對邊進行排序。
# sort edges in list of edges
some_edges_2 = sorted(some_edges_1)
print("Sorted edges:", some_edges_2)
上面兩個代碼塊的輸出:
Not sorted: [(2, 1), (2, 3), (2, 4), (2, 5)]
SORTED
Sorted nodes: [(1, 2), (2, 3), (2, 4), (2, 5)]
Sorted edges: [(1, 2), (2, 3), (2, 4), (2, 5)]
這也是反向排序的示例,您實際上可以看到對單個邊進行排序與對邊列表進行排序之間的區別。
print("Not sorted: ", some_edges)
print("SORTED REVERSE")
# sort nodes in edges
some_edges_1 = [tuple(sorted(edge, reverse=True)) for edge in some_edges]
print("Sorted nodes:", some_edges_1)
# sort edges in list of edges
some_edges_2 = sorted(some_edges_1, reverse=True)
print("Sorted edges:", some_edges_2)
輸出:
Not sorted: [(2, 1), (2, 3), (2, 4), (2, 5)]
SORTED REVERSE
Sorted nodes: [(2, 1), (3, 2), (4, 2), (5, 2)]
Sorted edges: [(5, 2), (4, 2), (3, 2), (2, 1)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.