python中的map()和reduce()——感知机代码理解

今天看了一篇文章,写了里面的代码,发现有点疑惑的地方,上网查找资料,现在弄懂了,特此记录一下
感知器

    def predict(self, input_vec):
        return self.activator(
            reduce(lambda a, b: a+b, map(lambda x_w: x_w[0] * x_w[1], zip(input_vec, self.weights)), 0.0) + self.bias
        )

感知器的过程
这里写图片描述
上面的代码其实就是这个过程:1*w0+x1*w1+x2*w2+xn*wn——w*x,也就是输入x权重,再传递到激励函数里,大概就这样

下面来剖析这段代码

  • activator()是激励函数
  • self.bias是偏置b
  • 根据y=f(w*x+b)这条公式,剩下的部分reduce(lambda a, b: a+b, map(lambda x_w: x_w[0] * x_w[1], zip(input_vec, self.weights)), 0.0)就是w*x了

重点解析这段代码
要想看懂这段代码就要对reduce()、map()、lambda有所理解

reduce()
reduce(function, sequence, initial=None)第一个参数是功能函数,第二个我理解是迭代器

def func(a, b):
    return a+b

list = [1, 2, 3, 4, 5]
result = reduce(func, list) #15, 过程是((((1+2)+3)+4)+5)

def func1(a, b):
    return a*b

result = reduce(func, list) #120, 过程是((((1*2)*3)*4)*5)

也可以用lambda

result = reduce(lambda a, b:a+b, list)  #15

lambda的例子

x = lambda a: a+10
print(x(5))     #15

x = lambda a, b : a*b
print(x(5, 6))      #30

map()

map(func, *iterables),跟reduce()基本一样,不过最后返回的也是一个迭代器

list = [1, 2, 3]
def func(x):
    return x*x
map(func, list)     #[1, 4, 9]

map(lambda x: x*x, list)        #[1, 4, 9]

如果看懂了这三个功能,那这段函数就基本能看懂了
还要提醒一点,文章中的代码是这样的

def predict(self, input_vec):
        '''
        输入向量,输出感知器的计算结果
        '''
        # 把input_vec[x1,x2,x3...]和weights[w1,w2,w3,...]打包在一起
        # 变成[(x1,w1),(x2,w2),(x3,w3),...]
        # 然后利用map函数计算[x1*w1, x2*w2, x3*w3]
        # 最后利用reduce求和
        return self.activator(
            reduce(lambda a, b: a + b,
                   map(lambda (x, w): x * w,  
                       zip(input_vec, self.weights))
                , 0.0) + self.bias)

map()那里,在python3中好像是不能把元祖传进一个元祖里,所以就改成把zip()组合成的一个元祖传进一个形参上述的就是x_w,然后x_w[0]就表示元祖第一个参数,x_w[1]表示元祖第二个参数,这样就能运行了

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值