Headers 说明了一切 . 有没有办法序列化sympy.lambdify生成的函数?:
import sympy as sym
import pickle
import dill
a, b = sym.symbols("a, b")
expr = sym.sin(a) + sym.cos(b)
lambdified_expr = sym.lambdify((a, b), expr, modules="numpy")
pickle.dumps(lambdified_expr) # won't work
dill.dumps(lambdified_expr) # won't work either
...我想这样做的原因是因为我的代码生成了很多lambdified函数,但我发现它每次都需要很长时间 .
2 回答
你实际上可以使用
dill
来腌制它 .dill
的最新版本(例如在github上)具有"settings",它允许在dump
上构造pickle的变体 . 是的,dill
的默认设置在此对象上失败,但如果使用递归跟踪全局引用的设置(即recurse = True
)则不会失败 . 此设置类似于默认情况下cloudpickle
为您提供的设置 .附:我是
dill
作者,所以我知道 .确实 - pickle,cPickle,甚至莳萝都在这个例子中使用默认设置失败 .
但cloudpickle不会失败!
要么
https://github.com/cloudpipe/cloudpickle