簡體   English   中英

從networkx中的圖形中刪除所有邊

[英]Remove all edges from a graph in networkx

我執行以下python命令,嘗試從圖形G刪除所有邊。

def method(G):
  edges = G.edges()
  G.remove_edges_from(edges)

但這會產生以下錯誤:

RuntimeError: dictionary changed size during iteration.

該命令似乎遍歷邊緣,但是當我移除邊緣時,它會在迭代過程中修改迭代器,這會導致錯誤。

我該如何解決?

您可能需要研究方法create_empty_copy ,該方法將不包含邊的節點復制到新圖中。 該文檔的字面意思是:

返回圖G的副本,其中所有邊均已刪除。

如果您想保持原始圖形不變,則可以執行以下操作

edges = list(G.edges)

以確保您在請求移除邊緣之前先將其復制。

networkx軟件包已經提供了幾種方法:

  1. remove_edges_from :從圖中刪除所有邊
  2. clear :從圖中刪除所有節點和邊

為什么干脆不使用它們中的任何一個來滿足您的需求? 例如,

G.remove_edges_from(G.edges())應該執行此工作,而不是定義另一個函數來執行此操作。 例如,考慮以下代碼在帶有jupyter notebook Windows 11中的python 3.5上運行:

import platform 
print(platform.python_version())
# 3.5.4
import networkx as nx
print(nx.__version__)
# 1.11
G=nx.complete_graph(5)
print(G.edges())
# [(0, 1), (0, 2), (0, 3), (0, 4), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
G.remove_edges_from(G.edges())
print(G.edges())
# []    

G.edges是一個“ edges視圖”,而G.edges()是一個“ edges數據視圖”,它們綁定到圖形,並在更改圖形時進行更新。

您需要將它們轉換為自包含的獨立變量,例如,每次將邊緣視圖轉換為列表或字典時,該變量不會在每次從圖形中刪除邊緣時更新。

因此,您可以使用以下解決方法:

G.remove_edges_from(list(G.edges()))
G.remove_edges_from(list(G.edges))
G.remove_edges_from(dict(G.edges))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM