You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将gplearn的输出导出为sympy表达式或其他可读格式?

把gplearn表达式转换为SymPy表达式的方法

当然可以实现!我之前也遇到过类似的需求,gplearn默认输出的这种函数式字符串确实没法直接在SymPy里用,但通过一些简单的字符串替换和SymPy的解析工具就能轻松转换。下面是具体步骤:

步骤1:处理函数名与语法映射

gplearn用的div、mul这类函数名,SymPy并不直接识别,我们需要把它们转换成SymPy兼容的运算符:

  • div(a,b) → a / b
  • mul(a,b) → a * b
  • add(a,b) → a + b
  • sub(a,b) → a - b
  • sqrt、log这类函数SymPy本身支持,不需要修改

步骤2:编写转换代码

直接用字符串替换+SymPy的sympify函数就能完成转换,代码示例如下:

from sympy import sympify, simplify

# 从gplearn得到的输出字符串
gplearn_output = "sqrt(div(add(1.000, sub(div(sqrt(log(0.978)), X0), mul(-0.993, X0))),add(-0.583, 0.592)))"

# 定义替换规则,注意顺序要先替换函数名开头,再处理参数分隔符
replace_rules = [
    ("div(", "("),
    ("mul(", "("),
    ("add(", "("),
    ("sub(", "("),
    (", ", " / "),  # 对应div的参数分隔
    (", ", " * "),  # 对应mul的参数分隔
    (", ", " + "),  # 对应add的参数分隔
    (", ", " - "),  # 对应sub的参数分隔
]

# 依次替换字符串
processed_expr = gplearn_output
for old, new in replace_rules:
    processed_expr = processed_expr.replace(old, new)

# 转换为SymPy表达式
sympy_expr = sympify(processed_expr)
# 可选:对表达式进行化简
simplified_expr = simplify(sympy_expr)

print("原始SymPy表达式:")
print(sympy_expr)
print("\n化简后的表达式:")
print(simplified_expr)

额外说明

如果你的gplearn表达式里还有其他自定义或内置函数(比如sin、cos、exp),只需要确保SymPy支持该函数,然后在替换规则里保留对应的函数名即可。比如sin(不需要替换,SymPy能直接识别。

内容的提问来源于stack exchange,提问作者Vinícius Godim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:01:15