近期开始使用python入门深度学习,几天下来发现python基础极差,在八月十五中秋节晚上抽空记下笔记,加深学习印象!
在学习感知器过程中 使用到了 lambda 表达式、map 和 reduce 内置函数
1. lambda表达式
def add_1(x,y): # 普通函数
return x+y
add_2 = lambda x,y:x+y # 函数式编程 / 匿名函数
print('add_1(2,3) = ' , add_1(2,3))
print('add_2(3,3) = ' , add_2(3,3))
输出结果为:
add_1(2,3) = 5
add_2(3,3) = 6
2. map内置函数
map函数的参数:接收一个函数和一个可迭代对象
map函数的返回值:一个map对象,如下:
f = map(lambda x:x*x,[1,2,3,4,5])
print(f)
------------------------输出为-----------------------
<map object at 0x0000022CEDDE8E80>
若想要获取想要的结果,应将其转为list对象,如下:
# 可以将map中的lambda表达式变为 fun 函数
def fun(x):
return x*x
e = map(fun,[1,2,3,4,5]) # 其返回值与下相同
f = map(lambda x:x*x,[1,2,3,4,5])
print(list(f))
print(list(e))
------------------------输出为-----------------------
[1, 4, 9, 16, 25]
[1, 4, 9, 16, 25]
即 map高阶内置函数,接收一个函数 fun 和一个 list 参数 ,通过把函数 fun 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
其中map接收的第一个参数 fun, 并非只能是具有一个参数的 fun;如下:
f = map(lambda x,y,z:x+y+z,[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5])
print(list(f))
--------------------输出为—---------------------------
[3, 6, 9, 12, 15]
3. reduce内置函数
reduce函数的参数:一个函数和一个可迭代对象
reduce函数对 list 中的每个元素反复调用函数 fun ,并返回最终结果。如:
from functools import reduce
print(reduce(lambda x,y:x+y,range(1,101))) #range(a,b) 即是生成 a 到 b-1 之间的所有数字
----------------------------输出为-----------------------
5050
另外reduce函数还可以传入3个参数,其中第三个参数即为初始值,如:
from functools import reduce
print(reduce(lambda x,y:x+y,range(1,101),100))
----------------------------输出为------------------------
5150
最后,我们来看一个包含了这三个函数的公式,该公式截取自实现感知器过程中计算输出的函数
reduce(
lambda a, b: a + b,
list(map(lambda tp: tp[0] * tp[1], zip(input_vec, self.weights))),
0.0
)+ self.bias
其含义为:
将输入层的特征向量 input_vec 与 其权重向量 weights 作乘积运算,最终将每组进行相加,并加上偏置项!
当input_vec 与 weights 分别为如下向量的时候:
input_vec = [1,2,3,4,5]
weights = [0.1,0.2,0.1,0.2,0.2]
---------------------其输出为------------------
1*0.1+2*0.2+3*0.1+4*0.2+5*0.2 = 2.6