代码之家  ›  专栏  ›  技术社区  ›  theduker

计算平均绝对误差时,If语句中赋值前引用的局部变量

  •  0
  • theduker  · 技术社区  · 2 年前

    UnboundLocalError:赋值前引用局部变量“under”

    import numpy as np
    
    def mae(y, y_hat):
        if np.where(y_hat >= y):
            over = np.mean(0.5*(np.abs(y - y_hat)))
        elif np.where(y_hat < y):
            under = np.mean(np.abs(y - y_hat))
        return (over + under) / 2
    

    我曾尝试将“under”设置为global,但也不起作用。这可能是一个简单的修复,虽然我更喜欢R用户。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Shavk with a Hoon    2 年前

    if elif np.mean(over,under) 任何一个 under over 不会被定义。因此,您需要初始化 在下面 结束 使用初始值或对其进行修改,因为对于当前逻辑,将只定义其中一个变量。

    编辑

    所以你把它改成了 (over + under) / 2

    import numpy as np
    
    def mae(y, y_hat):
        under = 0
        over = 0
        if np.where(y_hat >= y):
            over = np.mean(0.5*(np.abs(y - y_hat)))
        elif np.where(y_hat < y):
            under = np.mean(np.abs(y - y_hat))
        return (over + under) / 2
    

    这样,它们在不使用时根本不会影响输出。