首页 飞桨领航团 帖子详情
【AI达人养成营】学习笔记
收藏
快速回复
飞桨领航团 文章学习资料AI达人创造营 923 0
【AI达人养成营】学习笔记
收藏
快速回复
飞桨领航团 文章学习资料AI达人创造营 923 0

第一节
1.注释
单行注释 “#”开头

多行注释以 ' ' ' 三个单引号开头,以' ' '三个单引号为结尾

2.命名
标识符,由字符(A-Z)(a-z)下划线和数字组成,第一个字符不能是数字。标识符不能和Python中的保留字相同,不能包含特殊字符
python 允许有重名,使用时,按重名元素的最后一个来定义

number = 1
number = 2
print(number)
//此时会输出2
3. 自加自减
注意:python 中不存在i+ +,i- -等用法

4. 字符类型转换
int()

str()

bool()

float("0.6")

注意:转string型的小数到int型时不能跳步,得先转为float型,再转为int型

5. 组合数据类型
列表 list

list1 = [1,2,3,4,5]

​ list是一个有序的集合,可以随时添加和删除其中的元素,不限元素类型

用append函数往list中加入新元素

用pop函数返回list中的最后一个元素并将其删除
元组 tuple

​ tuple跟list类似,但tuple一旦初始化后就不能再修改

​ tuple1 = (1,2,3,4,5)
字典 dict

​ 使用键-值存储,其他语言中叫map

​ dict1 = {'apple':'苹果','banana':'香蕉'}

​ dict1['pineapple'] = '菠萝' 可以往进加元素
集合 set

set 与 dict 类似,但不存储value,在set中,没有重复的key

s = {1,2,3,4,5}
6.可变对象 不可变对象
可变对象:list dict set

不可变对象:tuple string int float bool

可变对象重名时,改变其中元素不会改变其地址

不可变对象重名时,会在元素中开一个新地址用于存值

7. 条件判断
if xxx :
elif xxx:

else:

score = 80
if score < 60:
print("不及格")
elif 60 <= score <= 80:
print("良好")
else:
print("优秀")
and 表示 且

or 表示 或

while xxx :
for i in statements(s)
依次打印用 range()

//计算从0到10的和
sum = 0
for i in range(10):
sum += i
print(sum)
break 、continue和pass
break 语句完全终止循环

continue语句只终止本次循环,之后循环继续,直至结束

pass 占位,目的是让程序跑起来,什么都不干
第二节
1.字符串的索引和切片
切片:[起始:结束:步长]

起始若为空则表示字符串开头,结束若为空则表示字符串结尾,步长为空则表示1

步长若为负数则表示从右往左走

2. 各种函数
startswith():判断开头是否为某元素

endswith() : 判断结尾是否为某元素

count():显示自定字符在字符串中的个数

find():返回从左第一个指定字符的索引,找不到返回-1

index():返回从左第一个指定字符的索引,找不到报错

in关键字 :判断字符串中是有含有某元素

split(): 按照指定内容进行分割

replace():从左到右替换指定的元素,默认全部替换,在最后面输入数字可以表示替换的个数

strip():默认去除两边的空格、换行符

upper():将字母大写

lower():将字母小写

capitalize():将首字母大写

3.字符串的格式化输出
format():指定了 :s ,则只能传字符串值,如果传其他类型值不会自动转换

当你不指定类型时,你传任何类型都能成功,如无特殊必要,可以不用指定类型

f-string:可读性更好

4.list进阶
append() : 表尾添加元素,还能用于列表的合并(将括号里的列表作为一个元素)

insert() : 在指定位置添加元素,下表不存在则在末尾添加

extend():列表的合并,一项一项的合并

list1 + list2 :列表合并,结果同extend,但并不会改变两个列表

pop(): 删除元素,并返回

remove():删除元素,并不会返回

5.列表生成式
list1 = [1,2,3,4,5]

[n+1 for n in list1] // 列表每一项加1

[(n+1)**2 for n in range(10)] //1-10之间所有数字的平方

6. 生成器
与列表生成式类似,用括号()括住,next()一下动一下,

7.函数
def 函数名(变量) :

​ ....

​ return ...

注意:1. 可以返回多个值,python会自动将其转化为tuple

可以用多个变量来接受返回的多个值,如

可以嵌套调用
第三节
1. 参数传递
(1)位置参数:
位置参数必须以正确的顺序传入参数,数量必须和声明时的一样

(2)缺省函数:
缺省参数的值如果没有传入,则被认为是默认值,(在参数后定义)

(3) 可变参数:
可变参数传入的参数个数是可变的

(在参数前加一个星号 *)

参数保存在一个 tuple 里

(4)关键字参数:
允许传入任意个含参数名的参数,关键字参数自动组装为一个dict

(在参数前打两个星号 ** )

(5) 命名关键字参数:
如果要限制关键字参数的名字,就可以用命名关键字参数

2. 参数的组合
参数定义的顺序必须是:必选参数,默认参数,可变参数,命名关键字参数和关键字参数

3. 变量的作用域和global变量
(1) 局部变量:作用域在函数内

(2) 全局变量:作用域在函数外

函数优先使用局部变量,没有的话,使用全局变量

定义在函数内部的变量,函数结束后自动消亡

global可以让函数的内部变量改变同名的全局变量

4. lambda匿名函数
lambda 若干个输入参数 : 返回值的表达式

可以将lambda函数赋值给一个表达式,而后调用表达式

5. 高阶函数
(1) 函数名是指向函数的变量

(2) 函数的名字可以作为一个变量,传入其他函数

5.1 map / reduce 函数
​ map() 函数有两个参数,前者为函数,后者为一个或多个序列

​ 会将序列中的每一个元素都通过函数进行处理


​ reduce()函数与map()函数的形式类似,但会对序列中的元素进行累积

from functools import reduce
# 使用时需要引入functools模块来调用
5.2 sorted函数
​ sorted()函数可以排序(默认从小到大)

sorted([-21,-5,12,-3,8])
​ 也可以从大到小进行排序

sorted([-21,-5,12,-3,8],reverse = True)

6. 装饰器
​ 他们是修改其他函数的功能的函数

6.1 函数可以作为返回值

7. 闭包
尽量嵌套,返回闭包时不要引用循环变量,或者后续可变的变量

8.偏函数(返回值还为函数)
import functools import partial

固定一个函数中的变量,还可以修改

第四节
面向对象
1. 构造一个类
​ class Hero(object) :

​ pass

2. 访问限制(私有)
私有化时在命名前加两个下划线:如:__attack

加一个下划线 _ ,为保护变量,

需要调用时 , 写一个get方法;需要修改时,写一个set方法

3. 类属性、类方法、静态方法
类中的属性分为:

实例属性:对象所有,互不干扰

类属性:类所有,所有对象共享

类中的方法分为:

实例方法:定义中有self 参数

类方法:定义中有cls 参数,使用@classmethod 装饰器

静态方法:定义中即没有self 参数,也没有cls 参数,使用@staticmethod 装饰器

4.继承
在定义类时,在括号里写上父类

子类里边如果加入了新的属性,则需要重写构造函数

super()函数可以直接找到子类所定义的父类

python3可以直接用super().xxx代替super(class,self).xxx

class 子类名(父类名):

情况1,如果子类有新增的属性,那么需要在子类init方法中,调用父类的init__

情况2,如果子类没有新增的属性,子类不需要写init方法

使用: 对象名 = 子类名(参数)

继承的好处:代码重用,升级功能(重写),新增功能(新的方法)

5.私有变量
父类的私有属性和私有方法

1.子类对象不能在自己的方法内部,直接访问父类的私有属性和私有方法

2.子类对象可以通过父类的共有方法间接访问到私有属性或私有方法

私有属性,私有方法是对象的隐私,不对外公开,外界以及子类都不能直接访问

6.
__slots__
限制对象绑定的属性
“slots”是个类属性,可以规定定义类时候的变量

7.
__l
第五节:
1.文件模块的使用
使用open方法
file object = open(file_name[,accessmode][,buffering])
#第一个参数为文件路径,第二个参数为打开文件的模式,第三个参数为寄存区的缓冲大小
模式 描述
t 文本模式 (默认)。
x 写模式,新建一个文件,如果该文件已存在则会报错。
b 二进制模式。
+ 打开一个文件进行更新(可读可写)。
U 通用换行模式(不推荐)。
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
strip方法
​ strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列

split()方法
​ split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串

当出现文件内容格式不统一时的解决办法
​ 1.使用异常跳过有问题的数据

​ 2.增加代码判断

循环读取文件各行数据的办法
方法一
f = open(***)
for line in f:

data = line.strip().split(',')

print(data.pop(0) + data.pop(0) +...)
f.close()
方法二
with open(***) as f: ##仅仅包含open()和close() , 不提供报错
for line in f:
data = line.strip().split(',')
print(data.pop(0) + data.pop(0) +...)
file对象的函数列表
​ seek()方法:定位到参数所指的位置

​ read()方法:读取指定大小的文件内容

​ tell()方法:告诉你文件内的当前位置

写入文件内容
​ write()方法:

f.write('******')
对象转JSON
JSON是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。

import json
将对象继承json.JSONEncoder

对对象使用dumps()方法并使用__dict__(转化成字典)方法
import json
class Hero(json.JSONEncoder):
version = 'v0.0.1'

def __init__(self, name, init_health=100, init_attack=10, alive=True):

self.name = name # 为对象绑定属性
self.health = init_health # 假装自己是私有属性
self.attack = init_attack # 私有属性
self.alive = True

self.birth()

def attack_enemy(self, enemy):
# 对象的方法 用本类创建的所有对象都有这个方法
enemy.health -= self.attack
if enemy.health < 0:
enemy.alive = False
enemy.health = 0
print(f'{enemy.name} 死亡')

def upgrade(self):
self.attack *= 1.1
self.health *= 1.1

def birth(self):
print(f'我,{self.name},出生了!')


h1 = Hero("内瑟斯",1500,100)
# h2 = Hero("德邦",800,200)
# h1.attack_enemy(h2)
# print(h2.health)
h1_json = json.dumps(h1.__dict__)
print(h1_json)
内存中的json形式的变量保存到文件
​ dumps()方法:将对象转化成一个变量

​ dump()方法:往文件中存入数据,两个参数(json变量,文件对象)

读取json文件内容
​ load()方法: 将json数据转化成变量

2.目录访问
import os
current_path = os.getcwd() # 获取当前的目录
os.chdir('****') # 改变当前的工作目录
os.system('mkdir today') #mkdir命令 创建一个文件夹名字为today

from pathlib import Path
# 返回当前的绝对路径
abs_path = os.pathlib.abspath('')
#判断路径是否存在
Path(abs_path).exists()

#返回当前路径下的文件和文件夹名
listdir = os.listdir()

#判断是否为文件夹
os.path.isdir('******')
3. 进程与线程
进程是只能一条线运行

线程是可以多线运行

第六节:
1.图像的基本概念
常见图片格式:jpg,png,gif,psd,tiff,bmp等

2.OpenCV
电脑上的彩色图是以RGB颜色模式显示的 , 但OpenCV中彩色图是以BGR通道顺序存储的,灰度图只有一个通道。

加载图片
使用cv2.imread()来读入一张照片 , 参数一为文件名(或者绝对路径,绝对路径中不能有中文);参数二为读入方式,省略几位默认值,

cv2.IMREAD_COLOR : 彩色图,默认值(1)

cv2.IMREAD_GRAYSCALE : 灰度图(0)

cv2.IMREAD_UNCHANGED :包含透明通道的彩色图(-1)

OpenCV打开 图片的方式为height,width,channels,灰度图为height,width.

3.ROI
Region of Interest , 感兴趣区域

4. 通道的分割与合并
#通道分割

b , g , r = cv2.split(img)

#通道合并

img = cv2.merge((b , g , r))

5.颜色空间转换
最常用的颜色空间转换如下:

RGB或BGR到灰度(COLOR_RGB2GRAY,COLOR_BGR2GRAY)
RGB或BGR到YcrCb(或YCC)(COLOR_RGB2YCrCb,COLOR_BGR2YCrCb)
RGB或BGR到HSV(COLOR_RGB2HSV,COLOR_BGR2HSV)
RGB或BGR到Luv(COLOR_RGB2Luv,COLOR_BGR2Luv)
灰度到RGB或BGR(COLOR_GRAY2RGB,COLOR_GRAY2BGR)
6.特定颜色转换
HSV是一个常用于颜色识别的模型, 相比BGR更易区分颜色,转换模式用COLOR_BGR2HSV表示

7.阈值分割
固定阈值分割
固定阈值分割很直接,一句话说就是像素点值大于阈值变成一类值,小于阈值变成另一类值。

cv2.threshold()用来实现阈值分割,ret是return value缩写,代表当前的阈值。函数有4个参数:

参数1:要处理的原图,一般是灰度图
参数2:设定的阈值
参数3:最大阈值,一般为255
参数4:阈值的方式,主要有5种:0: THRESH_BINARY  当前点值大于阈值时,取Maxval,也就是第三个参数,否则设置为0
1: THRESH_BINARY_INV 当前点值大于阈值时,设置为0,否则设置为Maxval
2: THRESH_TRUNC 当前点值大于阈值时,设置为阈值,否则不改变
3: THRESH_TOZERO 当前点值大于阈值时,不改变,否则设置为0
4:THRESH_TOZERO_INV  当前点值大于阈值时,设置为0,否则不改变
自适应阈值
Otsu阈值
8.图像几何变换
缩放图片
cv2.resize(), 参数一为图片名, 参数二 为放大后的大小

镜像翻转图片
cv2.flip() 参数一为图片名,参数二为翻转方式 : 为0时,沿着x轴垂直翻转,>0时沿着y轴水平翻转,<0时水平垂直翻转

平移图片
先获得图片的高和宽 rows , cols = img.shape[:2]

定义平行矩阵 M = np.float32([1 , 0 , Tx ] , [0 , 1, Ty]) Tx,Ty表示向x轴和y轴移动的距离

用cv2.warpAffine()实现平移

cv2.warpAffine(图片名 , M , (cols , rows))

9.绘图功能
cv2.line()画直线,cv2.circle()画圆,cv2.rectangle()画矩形,cv2.ellipse()画椭圆,cv2.polylines()画多边形,cv2.putText()添加文字。
画多条直线时,cv2.polylines()要比cv2.line()高效很多。
要在图像中打上中文,可以用PIL库结合OpenCV实现。
10.图片间的数学运算
图片相加
要叠加两张照片,可以用cv2.add()函数,相加两幅图片的形状(高度/宽度/通道数)必须相同

第七节:
图像识别基本框架
测量空间————》特征空间————》类别空间

0
收藏
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户