Python酸洗错误:TypeError:对象pickle不返回列表。问题与numpy?

时间:2012-01-18 14:09:22

标签: python numpy pickle

我写了一个脚本,它做了一些数据处理,然后在做一些更多的处理之前腌制结果,所以我可以摆弄绘图的最终参数。我正在挑选我创建的两个类的列表。每个列表都可以进行酸洗,但取消一个列表会返回以下错误:

Traceback (most recent call last):
  File "script.py", line 980, in <module>
    main()
  File "script.py", line 956, in promoter_main
    open(os.path.join(pickle_dir, 'doublep.pickle'), 'rb'))
  File "/usr/lib/python2.6/pickle.py", line 1370, in load
    return Unpickler(file).load()
  File "/usr/lib/python2.6/pickle.py", line 858, in load
    dispatch[key](self)
  File "/usr/lib/python2.6/pickle.py", line 1217, in load_build
    setstate(state)
  File "/home/jmerkin/software/numpy/numpy/ma/core.py", line 5468, in __setstate__
    ndarray.__setstate__(self, (shp, typ, isf, raw))
TypeError: object pickle not returning list

正如我所说,一个很好(SingleP的实例列表),另一个在unpickling(DoubleP的实例)时给了我这个错误。我犹豫是否发布了该类的整个代码,因为它很长,但基本上,它有几个方法来填充一些属性。这些属性由布尔值,元组列表,字符串,整数或numpy.ma.arrays列表组成。其中一些数组掩盖了numpy.nan。

这似乎是一个潜在的相关问题:http://projects.scipy.org/numpy/ticket/897。在这种情况下,问题是带有np.object的数组作为数组的dtype。但是,我一直在腌制和取消numpy.ma.arrays,包括已经屏蔽了numpy.nan的数组,在很长一段时间内没有问题。

我是否因为酸洗而错过了一些愚蠢的东西?我没有在腌制和尝试去除时间之间改变对象。


我重写了代码的一些部分,以便不是将n x m x l维的数组作为一些属性,而是有一个包含n个条目的列表,每个条目都是m x l数组,现在它很开心,泡菜和泡菜。我很困惑,但它运行。我不打算关闭这个,因为我的问题仍然存在,为什么我会收到这个错误?

1 个答案:

答案 0 :(得分:0)

有一个非常类似的问题:我重写了一个脚本,以便np.nan值也被屏蔽(我希望numpy,scipy和matplotlib可以一致地处理数组)但这导致pickle.load()阻止。我摆脱了蒙面数组,一切都恢复了。解决方案似乎是添加和删除面具,以取悦泡菜。我知道,解决方案并不多,但似乎有效。