【问题标题】:pickling networkx graph: can't pickle generator objects腌制networkx图:无法腌制生成器对象
【发布时间】:2019-09-09 06:43:57
【问题描述】:

我正在尝试腌制我的 networkx 图表,但出现下一个错误

can't pickle generator objects

我读到TypeError: can't pickle generator objects 你不能泡菜生成器。如何在图形对象中找到我的生成器?有没有办法递归遍历对象并找到类型==生成器?

【问题讨论】:

  • 请向我们展示您的代码。
  • 我构建了一个图表,并在很多地方添加/删除对象/边缘...所以我无法显示整个项目...我要寻找的是如何调试这个?
  • 这很难帮你解决。腌制networkx图时,我从未见过此错误。因此,如果没有更多细节,我认为我们无法真正告诉您如何找到生成器。您至少可以提供对 pickle 的调用吗?

标签: networkx pickle


【解决方案1】:

这可能是 Python 2.x 上 networkx 版本的问题,源于 networkx 函数(例如,用于计算最短路径长度)的变化,该函数在最新版本的包中返回生成器,而不是在1.x 版本。

一种解决方法是检查 networkx 返回的对象是否是生成器,如果是,则将其转换为可提取对象,例如,使用 Python 2.7.16 和 networkx 2.2 测试了以下代码:

import networkx, types, cPickle
G = networkx.cycle_graph(5)
val = networkx.shortest_path_length(G)
if isinstance(val, types.GeneratorType): # newer versions of networkx returns generator
    val_new = {source: target_dict for source, target_dict in val}
    val = val_new
cPickle.dump(val, open("test.pkl", 'w'))

【讨论】:

    猜你喜欢
    • 2015-05-11
    • 1970-01-01
    • 2021-08-18
    • 2020-04-07
    • 2017-10-23
    • 2013-08-18
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多