Save/load 同情 lambdifed 表达式

Save/load sympy lambdifed expressions

设想以下三步过程:

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

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

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

您可以使用 "dill",如此处所述

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

以上效果很好。 在我使用 Python 3.6 的情况下,我需要明确指出保存和加载的文件是二进制文件。于是将上面的代码修改为:

dill.dump(f, open("myfile", "wb"))

阅读:

f_new=dill.load(open("myfile", "rb"))