我使用的实现算法非常繁重,有三个部分。因此,我使用pickle在各个阶段之间转储所有内容,以便分别在每个阶段进行测试。
虽然第一个转储总是正常工作,但第二个转储的行为就好像它依赖于大小。它适用于较小的数据集,但不适用于较大的数据集。 (我尝试创建的热图实际上也是如此,但这是一个不同的问题)转储的文件大约是10MB,所以它没什么大的。
创建问题的转储包含一个完整的类,而后者又包含方法,字典,列表和变量。
我实际上尝试过从课程内外转储但都失败了。 我正在使用的代码如下所示:
data = pickle.load(open("./data/tmp/data.pck", 'rb')) #Reads from the previous stage dump and works fine.
dataEvol = data.evol_detect(prevTimeslots, xLablNum) #Export the class to dataEvol
dataEvolPck = open("./data/tmp/dataEvol.pck", "wb") #open works fine
pickle.dump(dataEvol, dataEvolPck, protocol = 2) #dump works fine
dataEvolPck.close()
甚至试过这个:
dataPck = open("./data/tmp/dataFull.pck", "wb")
pickle.dump(self, dataPck, protocol=2) #self here is the dataEvol in the previous part of code
dataPck.close()
当我尝试使用此部分加载类时出现问题:
dataEvol = pickle.load(open("./data/tmp/dataEvol.pck", 'rb'))
手中的错误是:
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
dataEvol = pickle.load(open("./data/tmp/dataEvol.pck", 'rb'))
ValueError: itemsize cannot be zero
有什么想法吗? 我在64位Win-7计算机上使用Python 3.3。如果我遗漏任何必要的内容,请原谅我,因为这是我的第一个问题。
答案:
答案 0 :(得分:1)
最近在此pull request修复了一个NumPy错误。要重现它,请尝试:
import cPickle
import numpy as np
cPickle.loads(cPickle.dumps(np.string_('')))