- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我意识到答案很可能是“否”!
基本上,我有一个表示正方形网格的图(节点和边类型);每个节点对象都包含对该节点有边的每个其他节点的引用,这似乎意味着当使用 cPickle.dump 序列化图形时,它以深度优先的方式遍历图形中的每个节点,这意味着对于一个井-表示 16x16 网格的连接图,它有效地将其视为 256 级深度的数据结构。这意味着较大的网格很快就会超过默认的最大 Python 递归深度,特别是因为实验表明它似乎需要大约 4 次堆栈调用才能进入数据结构的额外级别。
问题是,我还有一个 dict-of-dicts,它以允许我使用笛卡尔坐标来查找特定节点的方式引用该图(例如“node = nodes[3][6]” ).所以从概念上讲,它根本不是一个高度嵌套的数据结构,它是一个相当扁平的数据结构,恰好有很多横向引用,但 cPickle 似乎完全是深度优先的(我知道这是迄今为止最简单的方法工作)。
现在,我知道了 sys.setrecursionlimit(),并且我做了一些实验来找出我需要为多大的图形设置限制,所以这是“最简单”的选项。我知道我可以退出节点到节点的链接并依靠 dict-of-dicts 来维护网格和一个单独的平面结构来维护边缘权重,但有多种原因我想避免那——尤其是节点到节点的链接允许更直观地使用数据结构。我相信从我读过的内容来看,我应该能够提供我自己的 __getstate__
和 __setstate__
实现并覆盖 pickling 功能,但显然这是一个非常重要的数量工作的。如果有办法让 cPickle(或 pickle,我不挑剔!)使用广度优先遍历,它应该可以非常简单地解决问题!
最佳答案
编写一个合适的__getstate__()
方法似乎并没有那么复杂。尝试类似的东西
class Node(object):
def __getstate__(self):
state = self.__dict__.copy()
state.pop("neighbours")
return state
这将 pickle Node
实例的所有属性,但 neighbours
属性除外,我假设该属性包含到邻居的链接。 (您不需要 __setstate__()
方法。)
在对整个图进行 unpickling 之后,您将不得不重新创建到所有节点上的邻居的链接,但这也不应该那么困难。
关于python - 是否可以强制 cPickle 使用广度优先而不是深度优先递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5206831/
如何让此代码在重新打开时记住秤的最后位置? import Tkinter import cPickle root = Tkinter.Tk() root.sclX = Tkinter.Scale(ro
我正在尝试使用 cPickle 加载一个文件,如下所示, import cPickle cPickle.load(open('test', 'rb')) 但是,我得到这个错误, -----------
我有一个列表列表,每个子列表看起来像这样: a = [datetime.datetime(2012, 2, 1), datetime.datetime(2012, 2, 2), 'string', 4
我浏览了相关 cPickle 问题的各种回复,但似乎没有一个有帮助。使用 cloudpickle 代替 cPickle 也没有效果。 我有一个名为 MyModule 的模块,它定义了一个 MyClas
我有大约 80 万张 256x256 RGB 图像,总计超过 7GB。 我想将它们用作卷积神经网络中的训练数据,并想将它们连同它们的标签一起放入 cPickle 文件中。 现在,这占用了大量内存,以至
我正在使用 cPickle 序列化用于日志记录的数据。 我希望能够将我想要的任何东西放入对象中,然后将其序列化。通常这对 cPickle 没问题,但遇到了一个问题,我想序列化的对象之一包含一个函数。这
我正在使用 cPickle 将字典对象存储到文件中,并且无法获取除第一个条目之外的任何其他条目。最初,文件 tweets.pkl 为空,并且引发 EOFError。我确信这与它有关。谢谢 #!/usr
在我的脚本中,我尝试使用cPickle保存字典。一切工作正常,除了加载的字典已经修改每个键。我的字典看起来像:{'a':[45,155856,26,98536], 'b':[88,68,9454,78
我希望能够有一系列使用相同 pickle 文件的嵌套循环。见下文: def pickleRead(self): try: with open(r'myfile', 'rb')
cPickle.dump(object,file) 总是在文件末尾转储。有没有办法在文件中的特定位置转储?我希望下面的代码片段能够工作 file = open("test","ab") file.se
我有一个 python 程序,我想从 cmd 提示符运行,但每次我尝试时,它总是给我一个错误“NameError: name cPickle is not defined”。 我使用的是 python
你能帮我实现这个例子吗? 如果序列化字典存在,我想加载它,修改它并再次转储它。我认为我用于打开文件的模式有问题,但我不知道正确的方法。 import os import cPickle as pick
python 对象是字符串和数字的嵌套列表。 文件被打开以写入“w”(不是“wb”)但 cPickle 被告知使用 protocol=1(所以二进制)。 序列化和反序列化代码在 Linux 上运行良好
我意识到答案很可能是“否”! 基本上,我有一个表示正方形网格的图(节点和边类型);每个节点对象都包含对该节点有边的每个其他节点的引用,这似乎意味着当使用 cPickle.dump 序列化图形时,它以深
我有一个名为 classifier.pkl 的 pickled 文件,我正试图将其加载到另一个模块中。但是,我收到一个我不明白的错误。 我要 pickle 的代码: features = ['bob'
我将运行代码,将大量(~1000)个相对较小(50 个键:值对字符串)的字典写入日志文件。我将通过一个自动执行此操作的程序来完成此操作。我正在考虑运行如下命令: import random impor
我想在文件中保存一个 pickle.dumps() 结果,每行一个结果,如下例所示。然后当我读取文件时加载行时,我发现相同的结果包含一个换行符。 数据,由制表符分隔: 20120305\txxxxx\
我正在考虑创建像 dbms 引擎这样的持久存储的想法,与直接 cPickling 对象和/或使用搁置模块相比,创建自定义二进制格式有什么好处? 最佳答案 Pickling 是一个双面硬币。 一方面,您
有没有人能解释testLookups() 下的注释 code snippet ? 我已经运行了代码,确实评论说的是真的。但是我想了解为什么它是真的,即为什么 cPickle 根据引用方式为同一对象输出
我是 Python 新手。我正在将别人的代码从 Python 2.X 改编到 3.5。该代码通过 cPickle 加载文件。我将所有出现的“cPickle”更改为“pickle”,因为我知道 pick
我是一名优秀的程序员,十分优秀!