【问题标题】:Save/load sympy lambdifed expressions保存/加载 sympy lambda 表达式
【发布时间】:2015-03-16 14:54:18
【问题描述】:

想象以下三个步骤:

  • 我使用 sympy 构建了一个大型且有些复杂的表达式(此过程需要花费大量时间)。
  • 然后使用sympy.lambdify(也很慢)将该表达式转换为 lambda 函数。
  • 然后评估所述函数(快速)

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

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

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

【问题讨论】:

    标签: python lambda sympy


    【解决方案1】:

    您可以使用“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 是您的羔羊化函数。您可以使用以下命令将其转储到磁盘。

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

    之后,您可以使用以下行加载该函数。这也可以通过另一个 python 脚本来完成。

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

    【讨论】:

    • 我根据 G. Bernstein 的评论编辑了我的答案以与 python 3 兼容
    【解决方案2】:

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

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

    阅读:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多