如何在sympy中评估表达式树?

吉米利

这可能是一个非常基本的问题,但是我想知道在阅读完文档后是否缺少了sympy功能,或者此用例是否真的不包含此功能。

我有以下表达式:

a = sympify("b + 5")
b = sympify("c + 5")
c = sympify("5")

我正在尝试评估。sympy是否可以为您进行所有递归搜索和替换,还是我真的必须手动进行?

如:

eval(str(eval(str(a))))
忘了它

区分符号和表达式:

import sympy as sy
a, b, c = sy.symbols('a:c')

a_expr = sy.sympify("b + 5")
b_expr = sy.sympify("c + 5")
c_expr = sy.sympify("5")

sy.solve([sy.Eq(a,a_expr), sy.Eq(b,b_expr), sy.Eq(c,c_expr)])

产量

{c: 5, b: 10, a: 15}

上面a是一个符号,但是a_expr一个表达式:

In [117]: type(a)
Out[117]: sympy.core.symbol.Symbol

In [118]: type(a_expr)
Out[118]: sympy.core.add.Add

给定一个公式的字典,例如

formulas = {'a': 'b+5', 'b': 'c+5', 'c': '5'}

您可以通过列表理解来形成方程式

equations = [sy.Eq(sy.symbols(variable), sy.sympify(expr))
             for variable, expr in formulas.items()]

并用

solution = sy.solve(equations)
# {c: 5, b: 10, a: 15}

为什么不应该使用sympy.var

在处理动态变量(名称在运行时之前未知)时,建议避免使用sy.varsy.var将变量的名称添加到全局名称空间。这样做的唯一目的是如果您要通过name引用变量但是通过假设,变量名在运行时才是未知的。因此,脚本代码不应(实际上应该不应该)按名称引用变量。因此,sy.var如果变量确实是动态的,则使用应该是无用的。

但这不是真正的问题。动态变量名称(作为字符串)可以用

In [22]: formulas.keys()
Out[22]: ['a', 'c', 'b']

并且sy.Symbols可以列出

In [23]: solution.keys()
Out[23]: [c, b, a]

因此,您无需编写每个符号的全局变量名称,就可以编写循环来访问每个变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

评估表达式树

来自分类Dev

如何在nim中评估表达式?

来自分类Dev

如何在标准sql中评估表达式?

来自分类Dev

如何在AngularJS $ scope中评估存储的表达式

来自分类Dev

如何在C中评估布尔表达式?

来自分类Dev

如何在 es 中评估简单的数学表达式?

来自分类Dev

如何在sympy中替换和简化表达式?

来自分类Dev

如何在sympy中显示完整的表达式?

来自分类Dev

使用其他表达式中的表达式评估树

来自分类Dev

用JavaScript评估表达式树

来自分类Dev

如何评估表达式?

来自分类Dev

如何在子指令中评估Angular表达式并在父指令中公开它?

来自分类Dev

如何在子指令中评估Angular表达式并在父指令中公开它?

来自分类Dev

如何在视图中评估表达式

来自分类Dev

如何在编译时评估表达式?

来自分类Dev

如何在Sympy中查找表达式中的所有术语

来自分类Dev

如何在数学表达式评估器中修复此错误

来自分类Dev

如何在Resharper中评估表达式,例如IntellijIdea(Alt + F8)

来自分类Dev

如何在Mongodb中的查询评估条件表达式中使用字段?

来自分类Dev

如何在C#中评估自定义括号表达式?

来自分类Dev

如何在创建Observer时而不是在发出值时强制在Observer中评估表达式

来自分类Dev

如何在Julia中评估用正则表达式替换的函数?

来自分类Dev

如何在X ++中评估作为字符串给出的布尔表达式[AX 2012]

来自分类Dev

如何在Mongodb中的查询评估条件表达式中使用字段?

来自分类Dev

如何在Ultraedit正则表达式替换中评估

来自分类Dev

如何在SymPy中规范化表达式列表?

来自分类Dev

如何在SymPy中定义和求解相互引用的表达式

来自分类Dev

如何在Python Sympy Latex中构造组合表达式?

来自分类Dev

如何在SymPy表达式中查找自由符号*和*未定义函数?

Related 相关文章

  1. 1

    评估表达式树

  2. 2

    如何在nim中评估表达式?

  3. 3

    如何在标准sql中评估表达式?

  4. 4

    如何在AngularJS $ scope中评估存储的表达式

  5. 5

    如何在C中评估布尔表达式?

  6. 6

    如何在 es 中评估简单的数学表达式?

  7. 7

    如何在sympy中替换和简化表达式?

  8. 8

    如何在sympy中显示完整的表达式?

  9. 9

    使用其他表达式中的表达式评估树

  10. 10

    用JavaScript评估表达式树

  11. 11

    如何评估表达式?

  12. 12

    如何在子指令中评估Angular表达式并在父指令中公开它?

  13. 13

    如何在子指令中评估Angular表达式并在父指令中公开它?

  14. 14

    如何在视图中评估表达式

  15. 15

    如何在编译时评估表达式?

  16. 16

    如何在Sympy中查找表达式中的所有术语

  17. 17

    如何在数学表达式评估器中修复此错误

  18. 18

    如何在Resharper中评估表达式,例如IntellijIdea(Alt + F8)

  19. 19

    如何在Mongodb中的查询评估条件表达式中使用字段?

  20. 20

    如何在C#中评估自定义括号表达式?

  21. 21

    如何在创建Observer时而不是在发出值时强制在Observer中评估表达式

  22. 22

    如何在Julia中评估用正则表达式替换的函数?

  23. 23

    如何在X ++中评估作为字符串给出的布尔表达式[AX 2012]

  24. 24

    如何在Mongodb中的查询评估条件表达式中使用字段?

  25. 25

    如何在Ultraedit正则表达式替换中评估

  26. 26

    如何在SymPy中规范化表达式列表?

  27. 27

    如何在SymPy中定义和求解相互引用的表达式

  28. 28

    如何在Python Sympy Latex中构造组合表达式?

  29. 29

    如何在SymPy表达式中查找自由符号*和*未定义函数?

热门标签

归档