How to pickle a scipy.stats distribution (can't pickle instancemethod objects)

你离开我真会死。 提交于 2019-12-10 15:58:09

问题


How can I save a scipy.stats distribution?

For example:

a = [scipy.stats.norm(0,1), scipy.stats.norm(0,2)]
with open("distro.pickle", 'w') as f:
    pickle.dump(a, f)

Doing this I get a TypeError: can't pickle instancemethod objects


回答1:


They do not support pickling. The easier way to "solve" your problem is to pickle the arguments and, when unpickling, create a new object:

>>> from collections import namedtuple
>>> Norm = namedtuple('Norm', 'mu variance')
>>> def pickle_norm(n):
...     return pickle.dumps(Norm(*n.args))
... 
>>> def unpickle_norm(s):
...     return scipy.stats.norm(*pickle.loads(s))
... 
>>> s = pickle_norm(scipy.stats.norm(5, 10))
>>> d = unpickle_norm(s)


来源:https://stackoverflow.com/questions/14235693/how-to-pickle-a-scipy-stats-distribution-cant-pickle-instancemethod-objects

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!