Python 保存/加载sympy lambdifed表达式

Python 保存/加载sympy lambdifed表达式,python,lambda,sympy,Python,Lambda,Sympy,设想以下三个步骤: 我使用Symphy构建了一个大的、有点复杂的表达式(这个过程花费了很多时间) 然后使用sympy.lambdify(也很慢)将该表达式转换为lambda函数 然后评估所述函数(fast) 理想情况下,步骤1和2只执行一次,而步骤3将进行多次评估。不幸的是,步骤3的计算会随着时间的推移而分散(以及不同的python会话!) 我正在寻找一种将“lambdified”表达式保存到磁盘的方法,以便在以后加载并使用它们。不幸的是,pickle不支持lambda函数。我的lambda

设想以下三个步骤:

  • 我使用Symphy构建了一个大的、有点复杂的表达式(这个过程花费了很多时间)
  • 然后使用
    sympy.lambdify
    (也很慢)将该表达式转换为lambda函数
  • 然后评估所述函数(fast)
理想情况下,步骤1和2只执行一次,而步骤3将进行多次评估。不幸的是,步骤3的计算会随着时间的推移而分散(以及不同的python会话!)

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

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

您可以使用“dill”,如下所述

您必须导入dill并将变量“recursive”设置为值“True”

假设f是你的lambdified函数。您可以使用以下命令将其转储到磁盘

dill.dump(f, open("myfile", "wb"))
之后,您可以使用以下行加载函数。这也可以从另一个python脚本中完成

f_new=dill.load(open("myfile", "rb"))
上述方法效果良好。 在Python3.6中,我需要明确指出保存和加载的文件是二进制文件。因此,将上述代码修改为:

dill.dump(f,open(“myfile”,“wb”))

以及阅读:


f_new=dill.load(open(“myfile”,“rb”))

我根据G.Bernstein的评论编辑了我的答案,以便与python 3兼容
f_new=dill.load(open("myfile", "rb"))