python代码基础知识总结(一)
一、理论简述
个人认为机器视觉可以作为人工智能的一大分支,尤其是随着深度学习、卷积神经网络、残差网络的出现,导致机器对图像识别精度高于了人类。因此,可以说机器视觉是人工智能的目前相对十分成熟的应用。
下面的表格从IPO层面介绍了各种领域之间的关系,这里分别包含的有数字图像处理(Digital Image Processing)、计算机视觉(Computer Vision)、计算机图形学(Computer Graphics)、人工智能(Artificial Intelligence)。
二、代码知识
如果想要利用计算机实现各种奇幻的操作,以及赋予其智能,至少目前来说,我们还需要编写代码来一步步实现它。而就目前而言python语言是编写Al程序的不二之选。所以我们下面会着重更新一下常用的python代码知识,以及python最常用的的module,比如pandas、numpy、matplotlib。
我们会着重介绍一些,新奇而又方便的代码段。并不从最基础的hello world开始。如果读者的基础较差,这里推荐一下python的学习网站,莫烦python,相信你可以从中学到很多有关Al的东西。传送门 我们首先介绍一下python的字符串格式化输出。
2.1 f-string格式化输出
region='焦作'
gdp=1619
growth=3.8
print(f'2021年1-9月{region}市的地区生产总值是{gdp}亿元,同比增长{growth}%')
2021年1-9月焦作市的地区生产总值是1619亿元,同比增长3.8%
#利用位置进行格式化输出
data=['焦作',1619,3.8]
print('2021年1-9月{0}市的地区生产总值是{1}亿元,同比增长{2}%'.format(*data))
2021年1-9月焦作市的地区生产总值是1619亿元,同比增长3.8%
#对于字典的字符串格式化输出
data_dict={'region':'焦作','gdp':1619,'growth':3.8}
print('2021年1-9月{region}市的地区生产总值是{gdp}亿元,同比增长{growth}%'.format(**data_dict))
2021年1-9月焦作市的地区生产总值是1619亿元,同比增长3.8%
#另一种写法
print('2021年1-9月{}市的地区生产总值是{}亿元,同比增长{}%'.format(*data_dict.values()))
2021年1-9月焦作市的地区生产总值是1619亿元,同比增长3.8%
2.2 第一个高阶函数——map
def f(x):
return x**2
a=list(map(f,[1,2,3,4,5]))
print(a)
#map可以与函数连用。从而实现对于可迭代对象处理元素值。
#此处注意列表经过函数f处理后返回一个迭代的类,可以用列表将元素返回。
[1, 4, 9, 16, 25]
b=map(str.upper,['a','b','c','d','e'])
#对字符函数处理要加str前缀
list(b)
print(b)
[‘A’, ‘B’, ‘C’, ‘D’, ‘E’]
2.3 第二个高阶函数——reduce
from functools import reduce
def f(x,y):
return x*y
print(reduce(f,[1,2,3,4,5],15))
#k可以看到reduce函数会把迭代对象的结果当作x,下一个带迭代的元素当作y,以此类推,计算机结果。最后一位代表迭代对象的元素的初始值。
1800
#此外,对于一些简单的运算函数,而且我们在其他地方不准备继续使用它,我们可以匿名函数,lambda,改函数在迭代结束后,会自动释放内存。
print(reduce(lambda x,y:x+y,[1,2,3,4,5],20))
35
2.4 第三个高阶函数——filter
import math
def is_sqr(x):
return math.sqrt(x)%1==0
#判断结果是否为整数。
print(list(filter(is_sqr,range(1,101))))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
可以看到filter函数会返回所有条件为真的元素。
a=' hputhu '
print(a)
’ hputhu ’
a.strip()
print(a)
‘hputhu’
data=['焦作','hpu','',' ']
def fn(s):
return s and s.strip()
#返回含有非空元素
print(list(filter(fn,data)))
[‘焦作’, ‘hpu’]
2.5 第四个高阶函数——sorted
print(sorted([34,7,19,6,2,8]))
[2, 6, 7, 8, 19, 34]
对列表从小到大排序,返回列表类型
print(sorted([34,7,19,6,2,8],reverse=True))
[34, 19, 8, 7, 6, 2]
对列表从大到小排序,返回列表类型
print(sorted([34,7,19,-6,2,-8],key=abs))
[2, -6, 7, -8, 19, 34]
对元素值的绝对值从小到大排序。
date=['Year','Month','Day','hour','second']
print(sorted(date,key=str.lower))
[‘Day’, ‘hour’, ‘Month’, ‘second’, ‘Year’]
对元素根据元素首字母排序,不区分大小写。
2.6 第五个高阶函数——zip
month=['一月','二月','三月']
temperature=[6,8,16]
for i in range(0,3):
print('%s,%d'%(month[i],temperature[i]))
一月,6
二月,8
三月,16
res=zip(month,temperature)
list(res)
[(‘一月’, 6), (‘二月’, 8), (‘三月’, 16)]
注意:以下代码来自Jupyter Notebook
2.6 生成器(generator)知识介绍
def range2(i):
while i>0:
yield i #表明这是一个生成器
i-=1
func=range2(9)
type(func)
generator
生成器实际上是一种元素的生成函数,它和普通函数的区别在于,生成器的返回值不是通过return语句返回的,而是通过yield语句。 也就是说生成器没有办法使用return语句的返回值
下面通过生成器来实现斐波那契数列
def fibonacci(xitems):
n,a,b=0,0,1
while n<xitems:
yield b #有yield语句,表明这是一个生成器
a,b=b,a+b
n=n+1
return '输出完毕'
func=fibonacci(10)
next(func)
1
运行一次,输出结果为1.第二次为2,不断生成斐波那契数列的下一位。
2.7 迭代器(iterator)知识介绍
list1=['a','b','c','d','e','f']
list1
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’]
list.__next__()
AttributeError Traceback (most recent call last)
in
----> 1 list.next()
AttributeError: type object ‘list’ has no attribute ‘next’
next(list1)
TypeError Traceback (most recent call last)
in
----> 1 next(list1)
TypeError: ‘list’ object is not an iterator
list2=iter(list1)
type(list2)
list_iterator
list2.__next__()
‘a’
list3=iter(list1)
type(list3)
list_iterator
next(list3)
‘a’
2.8 迭代器的升级—枚举器(enumerator)
list_a=['a','b','c','d','e']
new_a=enumerate(list_a)
for idx,val in new_a:
print(idx,val)
0 a
1 b
2 c
3 d
4 e
可以看到返回元素值的同时,还返回元素的索引
list4=iter(list1)
list_enum=enumerate(list4)
type(list_enum)
enumerate
next(list_enum)
(0, ‘a’)
2.9 Python的装饰器
装饰器是一种可以修饰(修改)其他函数的函数,具有在不更改原函数的情况下拓展原函数的特性。
def add_text(func): #装饰器函数
def wrap():
print('==this is Mr Zhao`s deep learning classroom==')
func()
print('==see you next day==')
return wrap()
@add_text
def nihao():
print('hahahahaha')
运行结果
==this is Mr Zhao`s deep learning classroom==
hahahahaha
==see you next day==