0

我正在尝试绘制一些符号数据的图。我从以下形式的回归中得到了一些表达:

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我正在尝试生成具有以下内容的图:

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

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包不是很熟悉。但是,我一直在将其从 1D 回归构建到现在的 3D 回归。ER是我的一维变量并且工作正常。自从一维案例以来,我显然已经稍微改变了我的代码,但我仍然对为什么会弹出这个错误感到有点茫然。

任何指针将不胜感激。

4

1 回答 1

0

我已经想通了。最后是非常愚蠢的错误。我需要改变:

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

至:

T = list(plotdata['T'])
ER = list(plotdata['ER'])
P = list(plotdata['P'])

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

于 2020-11-10T20:43:30.573 回答