保存/加载sympy lambdifed表达式

时间:2015-03-16 14:54:18

标签: python lambda sympy

想象一下以下三个步骤:

  • 我使用sympy来构建一个大而复杂的表达式(这个过程花费了很多时间)。
  • 然后使用sympy.lambdify(也慢)将该表达式转换为lambda函数。
  • 然后评估所述功能(快速)

理想情况下,步骤1和2仅进行一次,而步骤3将进行多次评估。不幸的是,第3步的评估会随着时间推移而展开(以及不同的python会话!)

我正在寻找一种方法将“lambdified”表达式保存到磁盘,以便我可以在以后加载和使用它们。不幸的是,pickle不支持lambda函数。我的lambda函数也使用了numpy。

我当然可以手动创建匹配函数并使用它,但这似乎效率低且容易出错。

2 个答案:

答案 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"))