想象一下以下三个步骤:
sympy.lambdify
(也慢)将该表达式转换为lambda函数。 理想情况下,步骤1和2仅进行一次,而步骤3将进行多次评估。不幸的是,第3步的评估会随着时间推移而展开(以及不同的python会话!)
我正在寻找一种方法将“lambdified”表达式保存到磁盘,以便我可以在以后加载和使用它们。不幸的是,pickle不支持lambda函数。我的lambda函数也使用了numpy。
我当然可以手动创建匹配函数并使用它,但这似乎效率低且容易出错。
答案 0 :(得分:2)
您可以使用“dill”,如此处所述
How to serialize sympy lambdified function?
和
How to use dill to serialize a class definition?
您必须导入dill并将变量'recursive'设置为值“True”。
import dill
dill.settings['recurse'] = True
让我们说f是你的lambdified函数。您可以使用以下方法将其转储到磁盘。
dill.dump(f, open("myfile", "wb"))
之后您可以使用以下行加载该功能。这也可以从另一个python脚本完成。
f_new=dill.load(open("myfile", "rb"))
答案 1 :(得分:2)
以上效果很好。 在我使用Python 3.6的情况下,我需要明确指出已保存和加载的文件是二进制文件。所以将上面的代码修改为:
dill.dump(f, open("myfile", "wb"))
并阅读:
f_new=dill.load(open("myfile", "rb"))