我一直在无休止地试图弄清楚为什么下面的程序中的 * 变量c* 没有被返回。相反,我得到了一个错误,上面写着 *NameError:名称'c'没有定义 *。我已经在网上搜索了解决方案,包括这里,但还没有答案提供一个理想的解决方案。我如何打印 *c * 的内容?任何帮助将不胜感激。谢谢。
# obs=observation, p=model data, s=projected data
def bias_correction(obs, p, s, method='delta', nbins=10, extrapolate=None):
if (method == 'eqm') and (nbins > 1):
binmid = np.arange((1./nbins)*0.5, 1., 1./nbins)
qo = mquantiles(obs[np.isfinite(obs)], prob=binmid)
qp = mquantiles(p[np.isfinite(p)], prob=binmid)
p2o = interp1d(qp, qo, kind='linear', bounds_error=False)
c = p2o(s)
if extrapolate is None:
c[s > np.max(qp)] = qo[-1]
c[s < np.min(qp)] = qo[0]
elif extrapolate == 'constant':
c[s > np.max(qp)] = s[s > np.max(qp)] + qo[-1] - qp[-1]
c[s < np.min(qp)] = s[s < np.min(qp)] + qo[0] - qp[0]
elif method == 'delta':
c = obs + (np.nanmean(s) - np.nanmean(p))
elif method == 'scaling_add':
c = s - np.nanmean(p) + np.nanmean(obs)
elif method == 'scaling_multi':
c = (s/np.nanmean(p)) * np.nanmean(obs)
else:
raise ValueError("incorrect method, choose from 'delta', 'scaling_add', 'scaling_multi' or 'eqm'")
return c # c is the bias-corrected series for s
以下是完整错误消息的图像。
1条答案
按热度按时间uqcuzwp81#
感谢大家的友好回答。幸运的是,一个朋友刚刚帮我弄明白了,我告诉我应该分享它。C来自一个函数,所以它是函数的输出项。它不是一个独立的变量。所以我需要运行函数来产生输出。 下面是我运行的程序,产生了我想要的输出。