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

标签 python sympy

如何从 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/

相关文章:

python - 使用 Sympy 方程式绘图

python - 在 Sympy 中,如何定义像 f(x) 这样的通用函数,以便 sympy.diff(f(x), x) 返回 f' 而不是 0。

python - 分配和使用具有相同条件的变量而不会收到警告

javascript - 当包含 JQuery 时,Python 抛出 KeyError

python - 使用 pynacl (Ed25519) 导入私钥对文本进行签名

搜索字符串的 Python 逻辑

python - 用numpy求解矩阵方程时出错

python - cosd 和 sind 与 sympy

python - 用 Python 求解方程

python - 如何减少 TensorFlow 循环中的内存消耗?