簡體   English   中英

networkx刪除節點屬性

[英]networkx remove node attribute

我已經將numpy-array附加到networkx圖中的節點。 如何在磁盤上以gexf格式存儲圖形? (沒有numpy向量,因為它只是中間的東西...)

def create():
    G = nx.Graph()
    for i in range(256):
        G.add_node(i, vector=np.arange(20))
    for i in range(1,20):
        for j in range(1,256, 10):
            G.add_edge(i,j)

    temp = tempfile.mktemp(suffix=".gexf")
    print("dumping G = (V: %s, E: %s) to disk %s"
        % (len(G.nodes()), len(G.edges()), temp))
    nx.write_gexf(G, temp)

但是,這打破了。 我是python的新手,但對我來說ndarray似乎不可序列化? 那么,如何告訴networkx忽略該節點屬性?

File "...lib\site-packages\networkx\readwrite\gexf.py", line 430, in add_attributes
    attr_id = self.get_attr_id(make_str(k), self.xml_type[val_type],
KeyError: <type 'numpy.ndarray'>

使用本機pickle類的庫,或對HDF5使用h5py類的庫來序列化圖形對象。 例如,您可以執行以下操作:

import pickle

with open("pickle_file", "wb") as f:
    pickle.dump(create(), f)

可以通過以下方法將腌制后的圖加載回Python:

with open("pickle_file", "rb") as f:
    G = pickle.load(f)

我通過從數據項中刪除屬性“ vector”來解決此問題:

for (n,d) in G.nodes(data=True):
    del d["vector"]

完整的MWE:

def create():
    G = nx.Graph()
    for i in range(256):
        G.add_node(i, vector=np.arange(20))
    for i in range(1,20):
        for j in range(1,256, 10):
            G.add_edge(i,j)

    temp = tempfile.mktemp(suffix=".gexf")
    print("dumping G = (V: %s, E: %s) to disk %s"
        % (len(G.nodes()), len(G.edges()), temp))
    for (n,d) in G.nodes(data=True):
        del d["vector"]
    nx.write_gexf(G, temp)

暫無
暫無

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

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