TypeError: <lambda>() missing 1 required positional argument: '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)
但是现在去掉了元组参数解包
所以我不知道怎么算:(
你不能再解压了。但是,您可以直接使用元组,并在公式中使用索引:
map(lambda t: t[0]*t[1], zip(input_vec, self.weights))
使用 map
和 lambda
没什么兴趣,生成器理解等效:
(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,更短更清晰
做一个小的 运行ning 例子来说明问题是件好事。在您的情况下,事实并非如此,因为我们缺少一些变量。就像我在其他评论中所说的那样,您映射的列表是由元组组成的。正如您已经知道的那样,您不能再解压元组,但您可以像在数组上使用索引一样使用索引。一个简单的工作示例:
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。在 function-body 中,我使用索引来获取元组的第一个和第二个元素。如果您 运行 此代码,您会发现它有效。所以下一步是将其应用到您的代码中:
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)
这应该可以解决问题。
代码在这里
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)
但是现在去掉了元组参数解包 所以我不知道怎么算:(
你不能再解压了。但是,您可以直接使用元组,并在公式中使用索引:
map(lambda t: t[0]*t[1], zip(input_vec, self.weights))
使用 map
和 lambda
没什么兴趣,生成器理解等效:
(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,更短更清晰
做一个小的 运行ning 例子来说明问题是件好事。在您的情况下,事实并非如此,因为我们缺少一些变量。就像我在其他评论中所说的那样,您映射的列表是由元组组成的。正如您已经知道的那样,您不能再解压元组,但您可以像在数组上使用索引一样使用索引。一个简单的工作示例:
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。在 function-body 中,我使用索引来获取元组的第一个和第二个元素。如果您 运行 此代码,您会发现它有效。所以下一步是将其应用到您的代码中:
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)
这应该可以解决问题。