全部:
我正在尝试使用 dill 将我的 Python 程序中的所有数据保存到二进制文件中。我的程序同时使用了常规的 numpy 数组和 numpy 记录数组。如果我同时保存了 numpy 记录数组和常规数组,我在加载常规 numpy 数组时遇到问题。该问题可以通过以下简单代码来演示:
import dill as pickle
import numpy as np
class testdill:
def __init__(self, data):
self.data =data
# numpy record array type
personType = [('name', 'a32'), ('age', '<i2'), ('salary', '<i4'), ('weight','<f8')]
person = np.zeros(2, dtype=personType, order='F')
d = np.random.randn(5)
d1 = testdill(d)
d = np.random.randn(5)
d2 = testdill(d)
d = np.random.randn(5)
d3 = testdill(d)
f= open('testdill.dat', 'wb')
pickle.dump(person, f)
pickle.dump(d1, f)
pickle.dump(d2, f)
pickle.dump(d3, f)
f.close()
f= open('testdill.dat', 'rb')
person2 = pickle.load(f)
d11 = pickle.load(f)
d21 = pickle.load(f)
d31 = pickle.load(f)
上面的代码将导致加载回 d11 对象时出现关键错误。我不知道 dill 包中是否有错误,或者我没有正确使用 dill。我感谢任何解决此问题的建议和意见。我在 64 位 Windows 7 上使用 Python 3.4。
谢谢,
约翰