繁体   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