gpt4 book ai didi

python - 计算引用具有 "nan"值的变量的 SymPy 表达式

转载 作者:太空宇宙 更新时间:2023-11-03 21:39:57 26 4
gpt4 key购买 nike

我一直在使用 SymPyparse_expr() 函数计算引用变量的字符串表达式。现在,我在解析包含具有 "nan" 值的变量的表达式时遇到问题。我尝试通过传递类似 {"nan": 0} 的内容作为 来用 0 替换 "nan" 值local_dictglobal_dict 参数,但找不到使其工作的方法。

如何解析和计算引用具有“nan”值的变量的表达式?我可以通过将参数传递给 parse_expr()"nan" 映射到特定值吗?

>>> from sympy.parsing.sympy_parser import parse_expr
>>> data = {'result': {'a': 'nan', 'b': 123}}
>>> expr = "result['b'] + 123" # <-- This works well.
>>> parse_expr(expr, data)
>>> 246
>>> expr = "result['a'] + 123" # <-- This doesn't work.
>>> parse_expr(expr, data)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File ".../sympy-1.2rc1-py3.6.egg/sympy/parsing/sympy_parser.py", line 950, in parse_expr
return eval_expr(code, local_dict, global_dict)
File ".../sympy-1.2rc1-py3.6.egg/sympy/parsing/sympy_parser.py", line 863, in eval_expr
code, global_dict, local_dict) # take local objects in preference
File "<string>", line 1, in <module>
TypeError: must be str, not Integer

最佳答案

SymPy 可以理解实际的 nan 值,并进行适当的处​​理:

from math import nan
data = {'result': {'a': nan, 'b': 123}}
expr = "result['a'] + 123"
parse_expr(expr, local_dict=data) # returns nan

结果正确:nan加上任意数都是nan。

但是你的字典包含一个没有特殊含义的字符串'nan':它也可能是'foo'。这只是坏数据,因此您应该在将数据传递给 SymPy 之前修复数据:

data = {'result': {'a': 'nan', 'b': 123}}
for key in data['result']:
if data['result'][key] == 'nan':
data['result'][key] = 0

现在 parse_expr(expr, local_dict=data) 返回 123。

关于python - 计算引用具有 "nan"值的变量的 SymPy 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52939325/

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