使用Python numexpr评估科学计数法复数触发ValueError问题咨询
Numexpr处理科学计数法复数触发ValueError的问题分析与解决
你遇到的不是操作错误,是numexpr表达式解析器的语法格式限制导致的——它对复数的科学计数法写法有特定要求,0.+1.e+12j这种写法里的.+会被误判为非法控制字符组合。
先看你能正常运行的案例:
>>> import numexpr as ne >>> ne.evaluate("1000000000000j") array(0.+1.e+12j)
而触发错误的写法0.+1.e+12j,问题出在实部的0.后面直接跟+,numexpr的检查机制会把这个.+序列识别为禁止的控制字符,从而抛出ValueError。
解决方法很简单,调整复数的写法即可,以下几种格式都能正常解析:
- 去掉实部末尾的小数点:
0+1.e+12j - 省略实部(因为实部为0):
1.e+12j - 简化科学计数法的写法:
1e12j
验证代码:
>>> import numexpr as ne >>> ne.evaluate("0+1.e+12j") array(0.+1.e+12j) >>> ne.evaluate("1.e+12j") array(0.+1.e+12j) >>> ne.evaluate("1e12j") array(0.+1.e+12j)
本质上这是numexpr解析器对数值格式兼容的遗漏,不算严重bug,但确实需要遵循它支持的语法格式来写表达式。
内容的提问来源于stack exchange,提问作者Chipmuenk
相关产品推荐
相关产品推荐

