yiz*_*liu 6 python lambda tuples python-3.x iterable-unpacking
代码在这里
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-version代码就像 lambda (x, w)
但是现在删除了Tuple参数解压缩,所以我不知道如何找到它:(
你不能再打开包装了。但是,您可以直接采用元组,并在公式中使用索引:
map(lambda t: t[0]*t[1], zip(input_vec, self.weights))
Run Code Online (Sandbox Code Playgroud)
使用map
withlambda
没什么兴趣,生成器理解等效:
(x*w for x,w in zip(input_vec, self.weights))
Run Code Online (Sandbox Code Playgroud)
(以及拆包工作)
需要使用outerlambda
和even重复相同的构造reduce
,可以完全消除sum
它执行元素的总和:
return self.activator(sum(x*w for x,w in zip(input_vec, self.weights)) + self.bias)
Run Code Online (Sandbox Code Playgroud)
不再有 lambda,更短、更清晰
小智 5
制作一个运行示例来说明问题是一件好事。在您的情况下,这不是事实,因为我们缺少一些变量。就像我在其他评论中说的那样,您映射的列表是由元组组成的。就像您已经知道的那样,您无法再解压缩元组,但是可以像在数组上那样使用索引。一个简单的工作示例:
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)
Run Code Online (Sandbox Code Playgroud)
如您所见,传递给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)
Run Code Online (Sandbox Code Playgroud)
这应该可以解决问题。
归档时间: |
|
查看次数: |
5401 次 |
最近记录: |