繁体   English   中英

字典迭代 Lambda Function

[英]Dictionary Iteration Lambda Function

我一直在遍历 arrays 字典,并对字典中的每个数组元素应用线性回归。

from sklearn.linear_model import LinearRegression
model = LinearRegression()
for i in my_dict.keys():
    test = model.fit(x_val.reshape(-1,1), my_dict[i].reshape(-1,1))
    coeff = float(test.coef_)
    intercept = float(test.intercept_)
    my_dict[i] = lambda x: coeff * x  + intercept

在每次迭代中,我非常有信心将适当的系数和截距分配给 lambda function。 但是,似乎字典中每个存储的 lambda function 都使用系数并截取字典中的“最后一个”键。 我似乎无法弄清楚为什么会这样。 谢谢!

Edit: I'm aware I can just assign the linear regressor object to each key instead of using a lambda function (I just preferred lambda functions). 然而,这并没有解决这个问题。

这里这里

这是 Python 中的一个怪癖——闭包中的变量查找基于包含 scope 和变量名称的组合。 由于您的 lambdas 是在模块 scope 中定义的(请注意, for循环不会创建新范围),并且由于名称coeffintercept没有更改,因此每次查找将始终是循环最后一次迭代的值。

要解决此问题,您可以执行以下操作之一:

  1. 通过包装my_dict[i] = lambda x: coeff * x + intercept在本地 function
  2. 通过将它们捕获为默认 arguments 来烘焙coeffintercept到 lambda 的定义中: my_dict[i] = lambda x, coeff=coeff, intercept=intercept: coeff * x + intercept
  3. 保存my_dict (或其他容器)中的单个coeffintercept值,然后在需要时将它们拉出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM