类型错误:<lambda>()缺少1个必需的位置参数:“w”

2024-10-16 20:50:15 发布

您现在位置:Python中文网/ 问答频道 /正文

代码在这里

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)

但是现在元组参数解包被移除了 所以我不知道该怎么想


Tags: lambda代码self版本mapreduceinput参数
2条回答

制作一个小的运行示例来说明问题是一件好事。在你的例子中,这不是事实,因为我们缺少一些变量。就像我在另一条评论中说的,你映射的列表是由元组组成的。正如您已经知道的,您不能再解包元组,但是您可以像在数组中一样使用索引。一个简单的工作示例:

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)

这应该能达到目的。

你不能再打开行李了。但是,您可以直接接受tuple,并在公式中使用索引:

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

maplambda一起使用兴趣不大,生成器理解等价:

(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)

没有更多的羔羊,更短更清晰

相关问题 更多 >