簡體   English   中英

類型錯誤: <lambda> ()缺少1個必需的位置參數:“ w”

[英]TypeError: <lambda>() missing 1 required positional argument: 'w'

代碼在這里

return self.activator(reduce(lambda a, b: a+b, map(lambda x, w: x*w, zip(input_vec, self.weights)), 0.0) + self.bias)

python2.7版本代碼就像lambda (x, w)

但是現在刪除了Tuple參數解壓縮,所以我不知道如何找到它:(

制作一個運行示例來說明問題是一件好事。 在您的情況下,這不是事實,因為我們缺少一些變量。 就像我在其他評論中說的那樣,您映射的列表是由元組組成的。 就像您已經知道的那樣,您無法再解壓縮元組,但是可以像在數組上那樣使用索引。 一個簡單的工作示例:

val = reduce(lambda a, b: a+b, map(lambda t: t[0]*t[1], zip([10, 20, 30], [0.1, 0.3, 0.7])), 0.0)
print(val)

如您所見,傳遞給map函數的lambda函數現在只有一個參數。 我將其命名為t以表明這是一個元組,如果需要,可以將其命名為x。 在函數體中,我使用索引來獲取元組的第一個和第二個元素。 如果運行此代碼,則會看到它可以工作。 因此,下一步就是將其應用於您的代碼:

return self.activator(reduce(lambda a, b: a+b, map(lambda t: t[0]*t[1], zip(input_vec, self.weights)), 0.0) + self.bias)

這應該可以解決問題。

您不能再打開包裝。 但是,您可以直接使用元組,並在公式中使用索引:

map(lambda t: t[0]*t[1], zip(input_vec, self.weights))

lambda一起使用map幾乎沒有興趣,生成器理解等效:

(x*w for x,w in zip(input_vec, self.weights))    

(以及拆箱工作)

需要使用外部lambda重復相同的構造,甚至還需要reduce ,可以使用執行元素sum完全消除它:

return self.activator(sum(x*w for x,w in zip(input_vec, self.weights)) + self.bias)

沒有更多的lambda,更短更清晰

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM