类型错误: ()缺少1个必要的位置参数:'w'

问题描述 投票:0回答:2

代码就在这里

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参数解包被删除所以我不知道如何计算它:(

python python-3.x lambda tuples iterable-unpacking
2个回答
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函数现在只有一个参数。我打电话来说清楚这是一个元组,你可以把它叫做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)

这应该可以解决问题。


1
投票

你不能再打开包装了。但是,您可以按原样使用元组,并在公式中使用索引:

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)

没有更多的lambdas,更短更清晰

© www.soinside.com 2019 - 2024. All rights reserved.