gpt4 book ai didi

python - 从 SymPy 表达式中提取数字

转载 作者:行者123 更新时间:2023-12-01 06:30:49 28 4
gpt4 key购买 nike

如何从 SymPy 表达式中提取所有数值?例如,对于以下表达式:sin(a/pi + a) + 0.629116159212,我需要 pi-1 0.629116159212

我在 SymPy 中找到了 srepr 函数,它返回以下示例:

Add(sin(Add(Mul(Pow(pi, Integer(-1)), Symbol('a')), Symbol('a'))), Float('0.62911615921200004', precision=53))

如何从中提取所有数字,即不是 Symbol 的所有内容?

最佳答案

  • 方法atoms返回表达式的所有原子(即不可分割)组件的集合。

  • 属性is_number告诉您某个表达式(或原子)是否是数字。

综合:

from sympy import sin, pi
from sympy.abc import a

expr = sin(a/pi + a) + 0.629116159212
numbers = {atom for atom in expr.atoms() if atom.is_number}
<小时/>

现在,如果您需要保留出现次数,事情会变得有点复杂,因为 atoms 返回一个集合。在这里,我们还可以使用:

  • 替代方案 1:sympy.preorder_traversal(或postorder_traversal),它迭代表达式的所有子表达式。(感谢 Oscar BenjaminA.S. Meurer 。)

  • 替代方案2:表达式的 find 方法,返回匹配某个条件的所有表达式。

  • 属性is_Atom

from sympy import sin, pi, preorder_traversal
from sympy.abc import a

expr = sin(a/pi + 1/a) + 0.629116159212

is_atomic_number = lambda expr: expr.is_Atom and expr.is_number

# Alternative 1:
[
subexpression
for subexpression in preorder_traversal(expr)
if is_atomic_number(subexpression)
]

# Alternative 2:
expr.find(is_atomic_number,group=True)

关于python - 从 SymPy 表达式中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59922148/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com