Pickle 无法腌制命名元组
Pickle can't pickle a namedtuple
我正在尝试像这样腌制 namedtuple
:
def f():
TemplateData = namedtuple('TemplateData', ['field1', 'field2'])
f1 = np.random.randn(50,50)
f2 = np.random.randn(50,50)
td = TemplateData(f1, f2)
return td
data = f()
with open("aaaa.pkl", "wb") as fl:
pkl.dump(data, fl)
但是由于错误导致崩溃:
PicklingError: Can't pickle <class '__main__.TemplateData'>: it's not the same object as __main__.TemplateData
怎么了?
如果 pickle
不是存储命名元组的最佳方式 - 最有效的方式是什么?
您需要在函数外定义命名元组,并将命名元组的名称更改为 TemplateData
。
TemplateData = namedtuple('TemplateData', ['field1', 'field2'])
f1 = np.random.randn(50,50)
f2 = np.random.randn(50,50)
model_cluster = TemplateData(f1, f2)
with open("aaaa.pkl", "wb") as fl:
pkl.dump(model_clusters_dict, fl)
我正在尝试像这样腌制 namedtuple
:
def f():
TemplateData = namedtuple('TemplateData', ['field1', 'field2'])
f1 = np.random.randn(50,50)
f2 = np.random.randn(50,50)
td = TemplateData(f1, f2)
return td
data = f()
with open("aaaa.pkl", "wb") as fl:
pkl.dump(data, fl)
但是由于错误导致崩溃:
PicklingError: Can't pickle <class '__main__.TemplateData'>: it's not the same object as __main__.TemplateData
怎么了?
如果 pickle
不是存储命名元组的最佳方式 - 最有效的方式是什么?
您需要在函数外定义命名元组,并将命名元组的名称更改为 TemplateData
。
TemplateData = namedtuple('TemplateData', ['field1', 'field2'])
f1 = np.random.randn(50,50)
f2 = np.random.randn(50,50)
model_cluster = TemplateData(f1, f2)
with open("aaaa.pkl", "wb") as fl:
pkl.dump(model_clusters_dict, fl)