首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何串行化交变函数?

如何串行化交变函数?
EN

Stack Overflow用户
提问于 2015-07-09 10:15:06
回答 2查看 2.4K关注 0票数 8

标题说明了一切。是否有任何方法序列化由sympy.lambdify生成的函数?

代码语言:javascript
复制
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

..。我之所以想这样做,是因为我的代码生成了这么多的规模化函数,但我发现每次都要花很长时间。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-15 15:54:50

您实际上可以使用dill对其进行腌制。dill的最新版本(例如在github上)具有允许在dump上构造泡菜的“设置”。是的,dill的默认设置在此对象上失败,但如果您使用递归跟踪全局引用的设置(即recurse = True),则不会失败。此设置与cloudpickle默认提供的设置类似。

代码语言:javascript
复制
>>> import sympy as sym
>>> import pickle
>>> import dill
>>> a, b = symbols("a, b")
>>> a, b = sym.symbols("a, b")
>>> expr = sym.sin(a) + sym.cos(b)
>>> lambdified_expr = sym.lambdify((a, b), expr, modules="numpy")
>>> 
>>> dill.settings
{'recurse': False, 'byref': False, 'protocol': 2, 'fmode': 0}
>>> dill.settings['recurse'] = True
>>> dill.dumps(lambdified_expr)
'\x80\x02cdill.dill\n_create_function\nq\x00(cdill.dill\n_unmarshal\nq\x01U\x83c\x02\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00C \x00\x00s\x14\x00\x00\x00t\x00\x00|\x00\x00\x83\x01\x00t\x01\x00|\x01\x00\x83\x01\x00\x17S(\x01\x00\x00\x00N(\x02\x00\x00\x00t\x03\x00\x00\x00sint\x03\x00\x00\x00cos(\x02\x00\x00\x00t\x01\x00\x00\x00at\x01\x00\x00\x00b(\x00\x00\x00\x00(\x00\x00\x00\x00s\x08\x00\x00\x00<string>t\x08\x00\x00\x00<lambda>\x01\x00\x00\x00s\x00\x00\x00\x00q\x02\x85q\x03Rq\x04}q\x05(U\x03cosq\x06cnumpy.core.umath\ncos\nq\x07U\x03sinq\x08cnumpy.core.umath\nsin\nq\tuU\x08<lambda>q\nNN}q\x0btq\x0cRq\r.'

我是dill的作者,所以我会知道。

票数 10
EN

Stack Overflow用户

发布于 2015-07-12 06:42:45

实际上-泡菜,cPickle,甚至dill在这个例子中失败了,默认设置。

但云泡菜不会失败!

代码语言:javascript
复制
pip install cloudpickle

https://github.com/cloudpipe/cloudpickle

代码语言:javascript
复制
import sympy as sym
from cloudpickle import dumps, loads
a, b = sym.symbols("a, b")
expr = sym.sin(a) + sym.cos(b)
lambdified_expr = sym.lambdify((a, b), expr, modules="numpy")
var=dumps(lambdified_expr)
a1=lambdified_expr(10,10)
del lambdified_expr
lambdified_expr=loads(var)
a2=lambdified_expr(10,10)
a1==a2  # True
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31314517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档