代码在这里
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)
但是现在元组参数解包已经被删除了,所以我不知道该怎么办 :(
代码在这里
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)
但是现在元组参数解包已经被删除了,所以我不知道该怎么办 :(
制作一个小的运行示例以展示问题是一件好事。在你的情况下,这并不是事实,因为我们缺少一些变量。正如我在其他评论中所说,您映射的列表由元组组成。就像您已经知道的那样,您不能再解包元组,但是您可以使用索引,就像您在数组上使用的方式一样。以下是一个简单的工作示例:
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 (x, w)
,并自动将其输入参数解包为x,w
。对吗? - smci