Symengine 序列化

分享于2022年09月08日 c++ pickle python serialization symbolic-math 问答
【问题标题】:Symengine serializationSymengine 序列化
【发布时间】:2022-08-01 23:50:34
【问题描述】:

我正在做一个项目,我需要创建一个函数数组,这些函数是数组中其他函数的偏导数的组合。这些函数需要被简化,然后持续评估,尽可能快,因为它是实时模拟器的一部分。我已经尝试在 c++ 中使用 symengine 和在 python 中使用 python 和 sympy。我需要在 c++ 中使用这些函数,并且我已经设法使用 symengine 来制作它们,但是它们变得非常麻烦且评估速度很慢,而且我知道 symengine 中没有简化函数。我注意到,如果函数在被lambdified 之前使用sympy.simplify() 进行了简化,则可以更快地评估函数。(这也适用于python 中的symengine 函数)。有没有办法从python序列化和存储函数数组(符号或lamdified)并在c ++中加载它们?还是有其他一些用于 c++ 的符号数学库?或者有没有办法在 C++ 中简化 symengine 函数?

  • 欢迎来到 SO。请坚持使用一种语言并提出具体问题。没有实际的代码,很难理解你想要做什么。
  • 解决此问题的一种方法是使用 Sympy 生成函数,然后为它们导出 C++ 代码;我认为这在 Sympy 中是可能的,尽管如果没有特定的 C/C++ 导出,则可能有一个函数可以以可用作输入的形式打印内容,这将足够接近,因为 Python 数学语法不是与 C/C++ 太不同了。一个例外可能是求幂,您可能需要用 pow(x, y) 替换 x**y 或类似的东西。您可能会在特定于 Sympy 的论坛上获得更多信息。祝好运并玩得开心点。
  • 谢谢@RobertDodier。我最终这样做了????

【解决方案1】:

在python中,您可以保存字节

expr.__reduce__()[1][0]

然后在 C++ 中加载它

Basic::loads(str)

请注意,这是脆弱的,您需要为 python 和 C++ 使用相同的 symengine 版本

【讨论】: