scipy python中的模型校正困难

jtw3ybtb  于 2022-11-10  发布在  Python
关注(0)|答案(1)|浏览(130)

我一直在无休止地试图弄清楚为什么下面的程序中的 * 变量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

以下是完整错误消息的图像。

uqcuzwp8

uqcuzwp81#

感谢大家的友好回答。幸运的是,一个朋友刚刚帮我弄明白了,我告诉我应该分享它。C来自一个函数,所以它是函数的输出项。它不是一个独立的变量。所以我需要运行函数来产生输出。 下面是我运行的程序,产生了我想要的输出。

obs = ref_sliced.tmp
p = mod_interp.tmp
s = future_interp.tmp

bias_correction(obs, p, s, method='delta', 
nbins=10, extrapolate=None)

相关问题