【发布时间】:2017-11-16 14:14:03
【问题描述】:
有没有办法序列化或保存使用 SymPy 自动包装模块中的 ufuncify 工具二进制化的函数?
这里有一个使用dill:How to serialize sympy lambdified function? 的解决方案,但这仅适用于lambdified 函数。
这是一个最小的工作示例来说明:
>>> import pickle
>>> import dill
>>> import numpy
>>> from sympy import *
>>> from sympy.utilities.autowrap import ufuncify
>>> x, y, z = symbols('x y z')
>>> fx = ufuncify([x], sin(x))
>>> dill.settings['recurse'] = True
>>> dill.detect.errors(fx)
pickle.PicklingError("Can't pickle <ufunc 'wrapper_module_0'>: it's not found as __main__.wrapper_module_0")
动机:我有几个 5000 万字符长的 SymPy 表达式我想加快速度; ufuncify 工作得非常好(仅比 lambidfy 提高了三个数量级),但 ufuncify 每个表达式需要 3 小时。我希望能够不时利用ufuncify-ied 表达式(无需等待一天重新处理它们)。 更新:为了说明,计算机进入睡眠状态杀死了我的 python 内核,现在我需要等待大约 10 小时才能恢复二进制化函数
【问题讨论】:
标签: python serialization sympy numpy-ufunc