环境:python3.7
使用map函数和lambda表达式完成两个向量的点乘,并且更新了weights变量,迭代运算。代码运行时抛红报错如下:
TypeError: <lambda>() missing 1 required positional argument: 'w'
我的代码如下:
map_result = map(lambda value, weight: value * weight, input_vec, self.weights)
reduce_result = reduce(lambda a, b: a + b,map_result,0.0)
# 更新
self.weights = map(lambda value, weight: weight + rate * delta * value, input_vec, self.weights)
报错定位到上述第一行代码上。
解决:
上述代码中map()的用法是python2中,而在python3中,map()的返回值有所更改。
在python2中,map返回值为list;而python3中,map返回值为类似这种 <map object at 0x00000000021DA860>
而上边第一行代码中,lambda表达式中要的是个两个list,所以在更新weights时,要返回一个list。修改代码如下:
self.weights = list(map(lambda value, weight: weight + rate * delta * value, input_vec, self.weights))