gpt4 book ai didi

python - 当 zeta 用作较大表达式中的变量名时,parse_expr 失败

转载 作者:行者123 更新时间:2023-12-01 01:27:37 25 4
gpt4 key购买 nike

我将 sympy 1.3 与 python 3.6.6 结合使用,并尝试使用 sympy_parser.parse_expr 来从字符串创建 sympy 表达式。使用 'zeta' 执行此操作效果很好,但使用 'zeta + 1' 会出现类型错误:

  File "/home/user/.local/lib/python3.6/site-packages/sympy/core/expr.py", line 1023, in as_terms
coeff, _term = term.as_coeff_Mul()
TypeError: as_coeff_Mul() missing 1 required positional argument: 'self'

以下是生成此消息的方法:

from sympy.parsing.sympy_parser import parse_expr
parse_expr('zeta+1')

我认为它将 zeta 解释为一个函数(我不清楚错误消息)。我还尝试按如下方式设置 global_dict: parse_expr('zeta+1', global_dict={}) 但随后失败,因为它显示 Symbol没有定义。我可以将 Symbol (和 Integer)添加到我的自定义 global_dict 中,然后它会正确解析,但这对我来说似乎很难看(我还需要添加其他内容来支持通用表达式,例如 Float)。

有没有更干净的方法来做到这一点?

最佳答案

在 SymPy 中,zeta表示黎曼 zeta 函数,因此这就是字符串的解释方式。但后来zeta + 1不是有效的 SymPy 表达式,因为无法将数字添加到函数( zeta(x) + 1 将被接受。)

解决方案:使用local_dict参数来告诉 SymPy zeta 在这里的真正含义。不要乱搞global_dict ;无论如何,本地优先于全局。

from sympy import symbols
zeta = symbols('zeta')
parse_expr('zeta + 1', local_dict={'zeta': zeta})

关于python - 当 zeta 用作较大表达式中的变量名时,parse_expr 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53217611/

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