保存 networkx DiGraph 保留节点属性
Save networkx DiGraph preserving nodes attributes
我正在尝试通过保留节点的属性来保存 networkx 有向图。
我已经尝试使用 nx.write_weighted_edgelist
、nx.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'}})
因此您有多种选择,可以根据性能和对您尝试保存的特定属性数据的支持来决定。
我正在尝试通过保留节点的属性来保存 networkx 有向图。
我已经尝试使用 nx.write_weighted_edgelist
、nx.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'}})
因此您有多种选择,可以根据性能和对您尝试保存的特定属性数据的支持来决定。