有没有办法序列化或保存使用ufuncify
SymPy 自动包装模块中的工具进行二值化的函数?
这里有一个解决方案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 小时才能恢复二进制化函数