簡體   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