[英]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.