2024-10-16 22:25:16 发布
网友
这可能是一个非常基本的问题,但是我想知道,在阅读了文档之后,我是否遗漏了一个sypy功能,或者这个用例是否真的没有包含。在
我有以下表述:
a = sympify("b + 5") b = sympify("c + 5") c = sympify("5")
我想评估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)])
收益率
上面,a是一个符号,a_expr是一个表达式:
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'}
你可以用list comprehension来组成方程
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:
sympy.var
当处理的动态变量变量的名字是未知的,直到 运行时建议避免使用sy.var。sy.var添加 全局命名空间的变量。这样做的唯一目的是 将按名称引用变量。但根据假设变量 在运行时之前,名称是未知的。所以脚本代码实际上不应该, 不能按名称引用变量。因此,如果变量是真正动态的,那么使用sy.var应该是没有用的。在
sy.var
不过,这不是真正的问题。动态变量名(字符串) 可与
In [22]: formulas.keys() Out[22]: ['a', 'c', 'b']
并且sy.Symbols可以用
sy.Symbols
In [23]: solution.keys() Out[23]: [c, b, a]
因此,您可以编写循环来访问每个变量,而不必定义 每个符号的全局变量名。在
区分符号和表达式:
收益率
^{pr2}$上面,
a
是一个符号,a_expr
是一个表达式:给出一些公式,如
你可以用list comprehension来组成方程
并用
为什么不应使用
sympy.var
:当处理的动态变量变量的名字是未知的,直到 运行时建议避免使用
sy.var
。sy.var
添加 全局命名空间的变量。这样做的唯一目的是 将按名称引用变量。但根据假设变量 在运行时之前,名称是未知的。所以脚本代码实际上不应该, 不能按名称引用变量。因此,如果变量是真正动态的,那么使用sy.var
应该是没有用的。在不过,这不是真正的问题。动态变量名(字符串) 可与
并且
sy.Symbols
可以用因此,您可以编写循环来访问每个变量,而不必定义 每个符号的全局变量名。在
相关问题 更多 >
编程相关推荐