保存 networkx DiGraph 保留节点属性

Save networkx DiGraph preserving nodes attributes

我正在尝试通过保留节点的属性来保存 networkx 有向图。

我已经尝试使用 nx.write_weighted_edgelistnx.write_edgelist nx.write_weighted_edgelist ,在尝试之后(也查看了 https://networkx.org/documentation/networkx-1.10/reference/readwrite.html)我知道邻接列表和边列表都可以不保留节点的属性。

现在我也看到了 networkx link 中的其他选项,但我不明白其他命令是否保留属性,我需要确保它有效(我的代码需要创建和保存 5000 多张图表,几乎需要一天的时间 运行)。

那么保存图形和保留节点属性的最佳方法是什么?

首先,请注意您使用的是 NetworkX 文档的过时版本;你应该总是使用 stable version.

保证保留节点数据的一种格式是 pickle(尽管在 NetworkX 2.6 中已弃用,但目前可用):

In [1]: import networkx as nx

In [2]: G = nx.Graph()

In [3]: G.add_node("A", weight=10)

In [4]: nx.write_gpickle(G, "test.gpickle")

In [5]: H = nx.read_gpickle("test.gpickle")

In [6]: H.nodes(data=True)
Out[6]: NodeDataView({'A': {'weight': 10}})

GML 格式也适用于大多数数据类型:

In [8]: nx.write_gml(G, "test.gml")

In [9]: H = nx.read_gml("test.gml")

In [10]: H.nodes(data=True)
Out[10]: NodeDataView({'A': {'weight': 10}})

GEXF 也适用:

In [12]: nx.write_gexf(G, "test.gexf")

In [13]: H = nx.read_gexf("test.gexf")

In [14]: H.nodes(data=True)
Out[14]: NodeDataView({'A': {'weight': 10, 'label': 'A'}})

因此您有多种选择,可以根据性能和对您尝试保存的特定属性数据的支持来决定。