首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的Numexpr无法识别声明的符号

Python中的Numexpr无法识别声明的符号
EN

Stack Overflow用户
提问于 2020-11-10 18:48:14
回答 1查看 71关注 0票数 0

我正在尝试做一些符号数据的绘图。我有一些来自回归的表达式,形式是:

代码语言:javascript
复制
expr =  '(((((((((1.0)*(2.0)))-(ER)))-(-0.37419122066665467))*0.006633039574629684)*(0.006633039574629684*((((T)-(((1.0)+(P)))))-(P))))+0.1451920626347467)'

在这里,expr是一些预测:f = f(T, P, ER)。我知道这个特别的例子是一个疯狂的表达,但它并不是真的非常重要。基本上,假设我有一些数据帧,plotdata,我正在尝试用以下命令生成曲线图:

代码语言:javascript
复制
import pandas
import sympy
import numexpr
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

expr =  '(((((((((1.0)*(2.0)))-(ER)))-(-0.37419122066665467))*0.006633039574629684)*(0.006633039574629684*((((T)-(((1.0)+(P)))))-(P))))+0.1451920626347467)'

#Extract some data for surface plot but fixing one variable
plotdata = plotdata.loc[(plotdata.P == 1)]

#Extract data as lists for plotting
x = list(plotdata['T'])
y = list(plotdata['ER'])
f_real = list(plotdata['f'])

T_sympy = sympy.Symbol('T')
P_sympy = sympy.Symbol('P')
ER_sympy = sympy.Symbol('ER')
f_pred = numexpr.evaluate(expr)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_trisurf(x,y,f_real, alpha = 0.3)
ax.plot_surface(x,y,f_pred)

但是,我在使用f_pred时遇到一个错误。

代码语言:javascript
复制
numexpr.evaluate(expr)
Traceback (most recent call last):

  File "/anaconda3/lib/python3.7/site-packages/numexpr/necompiler.py", line 744, in getArguments
    a = local_dict[name]

KeyError: 'ER'


During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "<ipython-input-100-c765b0f1e5ce>", line 1, in <module>
    numexpr.evaluate(expr)

  File "/anaconda3/lib/python3.7/site-packages/numexpr/necompiler.py", line 818, in evaluate
    arguments = getArguments(names, local_dict, global_dict)

  File "/anaconda3/lib/python3.7/site-packages/numexpr/necompiler.py", line 746, in getArguments
    a = global_dict[name]

KeyError: 'ER'

我不太熟悉numexpr包。然而,我一直在从一维回归到现在的三维回归。ER是我的一维变量,运行良好。自1D案例以来,我显然略微修改了我的代码,但对于为什么会弹出这个错误,我仍然有点不知所措。

如果您有任何建议,我们将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-11-11 04:43:31

我已经弄明白了。最后,我犯了一个非常愚蠢的错误。我需要改变:

代码语言:javascript
复制
#Extract data as lists for plotting
x = list(plotdata['T'])
y = list(plotdata['ER'])

至:

代码语言:javascript
复制
T = list(plotdata['T'])
ER = list(plotdata['ER'])
P = list(plotdata['P'])

例如,numexpr.evaluate正在寻找输入数据,而不是符号!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64767431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档