python杂项记录——numpy/语法语句/sklearn/matplotlib/tkinter/keras

python杂项记录——numpy/语法语句/sklearn/matplotlib/tkinter/keras


一、 numpy库

1.1 建立列表——np.array()

tips:

  1. np.arrary(),用[]对列表初始化
  2. 用嵌套的[]层数区分几维列表,每嵌套一对[]则增加一个新的维度,二维数组,三维张量
import numpy as np
array_1=np.array([1,2,3])#一维

array_2 = np.array([
        [1, 1,1],
        [1, 2,3]
    ])#二维
    
array_3 = np.array([
        [[1, 1,1],
        [1, 2,3]],
        [[2, 2,2],
        [1, 2,3]]
    ])#三维

1.2 读取数组长度——np.shape()

tips:

  1. 数组变量名.shape无参:显示数组形状,如二维显示(行数,列数),其中行数是第一维度的长度
  2. np.shape(数组变量名):显示数组形状
  3. 数组变量名.shape[i]:显示第i个维度的长度,维度不一致时,要加参数dtype=object,且不一致的维度没有长度
#接上1.1的程序段
print(array_1.shape);
print(array_1.shape[0]);#第一个维度是3
print("**************");
print(array_2.shape);
print(np.shape(array_2));
print(np.shape(array_2[0]));#读取子数组的形状
print(array_2.shape[0]);#读取维度的长度
print("**************");
print(array_3.shape);
print(array_3.shape[2]);#第3个维度是3

在这里插入图片描述

1.3 全零数组——np.zeros()

tips:

  1. 返回一个给定形状和类型的用0填充的数组
  2. 语法:
img=np.zeros(shape, dtype=float, order=‘C’)
参数名参数值含义
shape( , , , )给定数组形状
dtype默认np.float64数据类型,可选参数
orderc:行优先;f:列优先优先,可选参数

1.4 数组乘法——np.multiply()、np.dot()和*

1.4.1 np.multiply()

数组和矩阵对应位置相乘,输出与相乘数组/矩阵的大小一致,example:8=2*4
在这里插入图片描述

1.4.2 np.dot()

tips:

  1. 对于秩为1的数组,执行对应位置相乘,然后再相加,最终得到的是一个数字
  2. 对于秩不为1的二维数组,执行矩阵乘法运算;
  3. 乘法运算:np.dot(A,B),用A的行乘以B对应的列再相加,example:7=11+32
    在这里插入图片描述

1.4.3 星号*

对数组执行对应位置相乘
对矩阵执行矩阵乘法运算
在这里插入图片描述

1.5 矩阵求和——np.sum()

矩阵内所有元素求和
在这里插入图片描述

1.6 数组重组——np.reshape()

  1. 语法:
    reshape(nx,ny): 将数据重组成nx行,ny列的数据。
    reshape(-1,ny): 将数据重组成ny列的数据,行数自动计算、自动调整。
    reshape(nx,-1): 将数据重组成nx行的数据,列数自动计算、自动调整。

在这里插入图片描述

  1. 对于含自动计算的语法,注意要能够整除,保证新矩阵的规整性。
    在这里插入图片描述

1.7 图像边缘填充——np.pad()

tips:

  1. 目的/效果:为了避免因为卷积运算导致输出图像缩小和图像边缘信息丢失
  2. 方法:在图像四周边缘填充0
  3. 语法
img_1= np.pad(img_0, pad_width, mode, **kwargs)
参数名参数值效果
img_0待填充的原图像/数组
pad_width各维度的各个方向上想要填补的长度
mode填充的方式
**kwargs表示填充的值,与pad_width相对应,缺省填充0(?)
mode‘constant’连续填充相同的值,每个维度可以分别指定填充值
mode'edge"用边缘值填充
mode‘linear_ramp’用边缘递减的方式填充
mode‘maximum’/‘minimum’/‘mean’/‘median’最大值/最小值/均值/中位数填充
mode‘reflect’/‘symmetric’对称填充
mode‘wrap’用原数组后面的值填充前面,前面的值填充后面

二、 其他内容——语法、语句

2.1 整除——“//"

"//"表示整数除法,它可以返回商的整数部分,向下取整
在这里插入图片描述

2.2 if __ name __ == “__ main __”

tips:

  1. 作用:程序入口
运行情况效果
当.py文件被直接运行if name == 'main’之下的代码块将被运行
当.py文件以模块形式被导入if name == 'main’之下的代码块不被运行
  1. 名词
变 量 名 称含义
_ _ name _ _用于表示当前模块的名字
_ _ main _ _如果一个.py文件(模块)被直接运行时,其__name__值为__main__,即模块名为__main__

2.3 with as 语句

tips:

  1. 语法格式:
    括号部分可以使用,也可以省略
with 表达式 [as target]:
    代码块
  1. 用法:将表达式的结果保存到target变量中
  2. 例子:文件a写入"hello,world!"
with open('D:\\a.txt','w') as f:
    f.write("hello,world!")

三、 机器学习模型——sklearn库

3.1 聚类

3.1.1 kmeams模型

tips:

from sklearn.cluster import KMeans
  1. 语法参数
KMeans(n_clusters= ,max_iter= ,n_init= ,init= ,algorithm= )
参数名参数值效果
n_clusters数字k值,分类的类别数
max_iter数字最大迭代数
n_init默认是10用不同的初始化质心运行算法的次数,一般不需要改
init初始化的k个质心初始值选择的方式
init‘random’随机
init默认’k-means’
algorithm算法区别
algorithm‘auto’根据数据值是否是稀疏
algorithm‘full’传统的K-Means算法
algorithm‘elkan’数据是稠密的

四、数据视图——matplotlib库

4.1 散点图——plt.scatter()

tips:

  1. 用于生成散点图
  2. 语法参数:
plt.sactter(x,y,size,c= ,marker= ,alpha= )
参数名参数值含义
x数据横轴数据
y数据纵轴数据
size数字,默认20散点的大小
c‘b’=blue /‘c’=cyan/‘g’=green/‘k’=black/‘r’=red/‘w’=wirte/‘y’=yellow色彩或颜色序列
marker默认’o’标记的样式
alpha0-1之间散点透明度

在这里插入图片描述

4.2 创建绘图区域/画布——plt.figure()

tips:

  1. 作用:和plt.subplot()一起用,用于创建一个显示多图像的画布。
  2. 语法参数:
plt.figure(num= ,figsize= ,dpi= ,facecolor= ,edgecolor= ,frameon= )
参数名参数值作用
num图像编号或名称,数字为编号 ,字符串为名称,不指定调用figure时就会默认从1开始
figsize指定figure的宽和高,单位为英寸
dpi参数指定绘图对象的分辨率,即每英寸多少个像素
facecolor背景颜色
edgecolor边框颜色
frameon‘y’/‘n’是否显示边框

4.3 创建单个子图——plt.subplot()

tips:

  1. subplot可以将figure划分为n个子图,但每条subplot命令只会创建一个子图 。使用for 循环绘制多个子图
    example:两行三列
    在这里插入图片描述

  2. 语法参数:

plt.subplot(nrows,ncols,sharex,sharey)
参数名参数值含义
nrows数字将画布划分成 i 行
ncols数字将画布划分成 j 列
indx对子图编号

4.4 图像刻度——plt.ticks()

tips:

  1. plt.xticks() 是x 轴刻度,plt.yticks() 是y 轴刻度
  2. plt.xticks([]) 是不显示x 轴的刻度; plt.yticks([]) 是不显示y 轴的刻度
  3. plt.xticks(np.arange(3)) 就将生成的最后一个图的横坐标设置为只有0、1和2三个刻度
  4. examplre:横轴无刻度,数轴四个刻度
    在这里插入图片描述

4.5 刻度标题——plt.label()

tips:

  1. plt.xlabel() 是x 轴标题,plt.ylabel() 是y 轴标题
  2. 效果:
    在这里插入图片描述

4.6 绘制网格——plt.grid()

tips:

  1. 语法:
plt.grid()
  1. 效果:
    在这里插入图片描述

五、图形用户界面GUI——tkinter库

原帖:https://www.jianshu.com/p/91844c5bca78,仅作常用内容整理

5.1 窗体

tips:

  1. 导入库:from tkinter import *
  2. 初始化窗体:Tk()
  3. 窗体标题:title(‘标题’)
  4. 窗体大小:geometry('长x宽‘)
  5. 在显示屏上显示窗体,窗体进入等待事件响应状态:mainloop()
from tkinter import *
root= Tk()
root.title('hello world')
root.geometry('240x240') # 这里的乘号不是 * ,而是小写英文字母 x
root.mainloop()

5.2 控件

5.2.1 控件共同属性

在这里插入图片描述

5.2.2 控件布局.像素坐标——place()

注:有pack()、grid()、place()三种,仅整理place()和pack()
tips:

  1. 控件变量名.pace()用于设置该控件的位置信息
  2. 根窗体左上角为(0,0),水平向右,垂直向下为正方向;x是水平方向,y是垂直方向。
  3. 语法参数:相对数值(relative)和绝对数值只要有一类,能表明长宽和位置信息就可以
message_01.pace(x= ,y= ,relx= ,rely= ,height= ,width= ,relheight= ,relwidth= )
参数名参数值含义
x,y起始位置的像素坐标
relx,rely在0-1之间起始位置,相对于窗体的宽高比例,相对的位置
height,width控件本身的像素高度和像素宽度
relheight,relwidth在0-1之间控件本身相对于根窗体的高度和宽度

5.2.3 控件布局.简单最小——pack()

注:有pack()、grid()、place()三种,仅整理place()和pack()
tips:

  1. 不加参数的.pack():按布局语句的先后,以最小占用空间的方式自上而下地排列控件实例,并且保持控件本身的最小尺寸。
  2. 加参数的.pack(fill=’ ‘,side’ '):
参数名参数值含义
fill填充
fill‘X’水平方向填充
fill‘Y’垂直方向填充
fill‘BOTH’二维伸展填充
side本控件实例的布局相对于下一个控件实例的方位
side‘TOP’/‘RIGHT’/‘LEFT’/‘RIGHT’/‘BOTTOM’

examples:
在这里插入图片描述
在这里插入图片描述

5.2.4 标签和消息——Label/Message

tips:

  1. 功能:用于呈现文本信息
  2. 区别:单行与多行
  3. 动态更新文本方法:
    1)使用configure()
    先定义一个控件实例label_1,再通过调用以下函数修改文本信息。

label_1 = tk.Label(root,text='old',fg='blue',font=("黑体",80))
label_1.pack()
#当需要修改Lb内容时,调用以下语句
label_1.configure(text='new')

2)使用内部变量svar=tk.StringVar()
先定义一个内部变量svar,在初始化Label时赋值给Label的参数textvarible,再通过svar.set()修改svar,来修改Label内的文本内容

svar=tkinter.StringVar()
svar.get('old')
label_2= tk.Label(root,textvariable=svar,fg='blue',font=("黑体",80))
label_2.pack()
#当需要修改Lb内容时,调用以下语句
svar.set('new')   # 获取当前时间

example:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2.5 文本框——Text

区别:entry是接收单行文本输入的控件
tips:

  1. 初始化:txt_1=Text(窗体变量名)
  2. 函数:
    位置参数可取整数、浮点数或END(末尾)
    在这里插入图片描述
  3. example:
from tkinter import *
import time
import datetime

def gettime():
       s=str(datetime.datetime.now())+'\n'#读取时间
       txt.insert(END,s)#后缀增加
       root.after(1000,gettime)  # 每隔1s调用函数 gettime 自身获取时间

root=Tk()
root.geometry('320x240')
txt=Text(root)#在root窗口中生成txt文本
txt.pack()#文本框位置
gettime()
root.mainloop()

在这里插入图片描述

5.2.6 输入框——Entry

tips:

  1. 初始化:ent_1=Entry(窗体变量名)
  2. 函数:
    位置参数可取整数、浮点数或END(末尾)
函数用途
get()取值
delete(其实位置,终止位置)删除

5.2.7 按钮框——Button

tips:

  1. 主体初始化:
button_1=tk.Button(窗体名,text=' ',command=  )
参数名参数值含义
text按钮内的文字
command触发按钮需要执行的功能函数名

**
关于command:
1)直接调用函数:表达式为“command=函数名”,函数名后面不加括号,也不能传递参数。
2)调用参数:表达式为“command=lambda:函数名(参数列表)”,其中参数列表使用.get()的形式
3)examples:

from tkinter import *

def run1():
     a = float(inp1.get())
     b = float(inp2.get())
     s = '%0.2f+%0.2f=%0.2f\n' % (a, b, a + b)
     txt.insert(END, s)   # 追加显示运算结果
     inp1.delete(0, END)  # 清空输入
     inp2.delete(0, END)  # 清空输入

def run2(x, y):
     a = float(x)
     b = float(y)
     s = '%0.2f+%0.2f=%0.2f\n' % (a, b, a + b)
     txt.insert(END, s)   # 追加显示运算结果
     inp1.delete(0, END)  # 清空输入
     inp2.delete(0, END)  # 清空输入

# 方法-直接调用 run1()
btn1 = Button(root, text='方法一', command=run1)
btn1.place(relx=0.1, rely=0.4, relwidth=0.3, relheight=0.1)

# 方法二利用 lambda 传参数调用run2()
btn2 = Button(root, text='方法二', command=lambda: run2(inp1.get(), inp2.get()))
btn2.place(relx=0.6, rely=0.4, relwidth=0.3, relheight=0.1)

**

  1. 修改按钮变量
    可用修改按钮上的文字、对按钮的状态重新赋值
 Button1.configure(text=' ', state=' ') 
参数名参数值含义
text按钮内的文字
state‘normal’/‘active’/disabled’按钮功能状态

5.2.8 单选按钮——Radiobutton

tips:

  1. 主体初始化:
rd1=Radiobutton(窗体变量名,text=' ',variable= ,value= ,command= )
参数名参数值含义
text按钮内的文字
variable给该组单选框按钮设置共同变量名,用于读取返回
value给当前单个单选框按钮编码,设置返回数值
command触发按钮需要执行的功能函数名

通过“variable中设置的变量名.get()”来获得被选中实列的value值
2. examples:

from tkinter import *
def Mysel():
      dic = {0:'甲',1:'乙',2:'丙'}
      s = "您选了" + dic.get(var.get()) + "项"
      lb.config(text = s)

root = Tk()
root.title('单选按钮')
lb = Label(root)
lb.pack()

var = IntVar()
rd1 = Radiobutton(root,text="甲",variable=var,value=0,command=Mysel)
rd1.pack()

rd2 = Radiobutton(root,text="乙",variable=var,value=1,command=Mysel)
rd2.pack()

rd3 = Radiobutton(root,text="丙",variable=var,value=2,command=Mysel)
rd3.pack()

root.mainloop()

5.2.9 文件选择对话框——tkinter.filedialog包

tips:

  1. 功能:弹出文件选择对话框,让用户直观地选择一个或一组文件,以供进一步的文件操作。
  2. 使用:可设置内部变量svar=tk.StringVar()用于保存地址,一般与button连用,设置一个"打开文件夹“的按钮,在command对应的函数中添加.askopenfilename
svar= tk.StringVar()#保存地址变量
filename = tk.filedialog.askopenfilename() #弹出文件选择对话框
svar.set(filename)#保存地址

六、神经网络模型——keras库

6.1 预处理:类别转换成one-hot编码——tf.keras.utils.to_categorical()

tips:

  1. one-hot编码(独热编码/一位有效编码):使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。
  2. examples:对四位编码
    在这里插入图片描述
  3. 语法参数:
tf.keras.utils.to_categorical(
    y,
    num_classes=None
)
参数名参数值含义
y待编码数据
num_classes标签类别总数
  1. 应用——对于数据预处理:标签转换+图像统一
    补充:数据类型转化函数——astype()
    example:
# 数据预处理
import tensorflow as tf
#将标签向量换成one-hot编码
num_classes = 10  
y_train = tf.keras.utils.to_categorical(y_train, num_classes)
y_test = tf.keras.utils.to_categorical(y_test, num_classes)
print(y_train.shape, 'ytrain')
# 图像数据统一并缩小
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255

6.2 Sequential模型

6.2.1 导入库并建立模型

在anaconda下的jupyter中安装tensorflow方法链接

from keras.models import Sequential
from keras.layers import Dense, Activation,Conv2D,MaxPooling2D,Flatten,Dropout
from tensorflow import optimizers
#建立模型
model = tf.keras.Sequential()

6.2.2 添加图层(layers)进入模型

**只记录常用的主要参数,参数表并不全**
1、二维卷积层Conv2D

tips:

  1. 功能:动态地提取图像特征,由滤波器filters和激活函数构成。
  2. 特点:局部连接(稀疏连接)和权值共享;
    1)局部连接:卷积层的节点仅仅和其前一层的部分节点相连接,只用来学习局部区域特征;
    2)权值共享: 卷积核上面的权重参数是空间共享的;
  3. 语法参数:
    一般要设置的超参数包括卷积核大小、步长,激活函数类型,填充类型
model.add(Conv2D(kernel_size,strides=( , ),padding=' '))
参数名参数值含义
kernel_size(x,y) or 数字卷积核的大小,如果是方阵可以直接写成一个数
strides(x,y)控制卷积在x、y方向上的步长,,默认是卷积核尺寸
padding边缘填充,默认是不填充
padding‘same’通过kernel_size 缩小了维度,但是四周会填充 0,保持原先的维度
padding’valid’存储不为 0 的有效信息
2、激活层Activation

tips:
1、功能:对一个层的输出施加激活函数。
2、语法参数:

model.add(Activation(activation=' '))
参数名参数值含义
activation激活函数
activation‘relu’常用激活函数
activation‘softmax’常用激活函数
activation‘Sigmoid’常用激活函数
activation‘Tanh’常用激活函数
3、 最大池化层MaxPooling2D

tips:

  1. 功能: 对提取到的特征信息进行降维。
  2. 目的:
    1)使特征图变小,简化网络计算复杂度;
    2)特征压缩,提取主要特征,增加平移不变性,减少过拟合风险。
  3. 语法参数:
model.add(MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid'))
参数名参数值含义
pool_size(x,y),默认是(2,2)池化核的尺寸
strides(x,y)控制在x、y方向上的步长,默认是池化核尺寸
padding边缘填充,默认是不填充
padding‘same’通过kernel_size 缩小了维度,但是四周会填充 0,保持原先的维度
padding’valid’存储不为 0 的有效信息
4、 展平层Flatten

tips:

  1. 功能:将输入层的数据压成一维的数据
  2. 位置:卷积池化层和全连接层之间。因为全连接层只能接收一维数据,而卷积层可以处理二维数据
  3. 语法参数:
model.add(Flatten())
5、 全连接层Dense

tips:

  1. 功能:处理“压缩的图像信息”并输出结果
  2. 位置:在经过数次卷积和池化之后,先对结果进行展平,再输入全连接层
  3. 语法参数:
model.add(Dense(units=' ', activation=' ',input_shape=' '))
参数名参数值含义
units指定该网络层中的神经元个数
activation激活函数,默认None,如果不是 None,则会应用于输出
activation‘relu’常用激活函数
activation‘softmax’常用激活函数
activation‘Sigmoid’常用激活函数
activation‘Tanh’常用激活函数
input_shape输入数据的形状,全连接层的第一层必须指明
6、 输出层Dropout

tips:

  1. 功能:dropout正则化,以按照一定频率,随机地将输入的中的一些节点数值设置为0,可以防止过拟合
    2.没有需要学习的参数,只在训练过程中其作用
    3.语法参数:
model.add(Dropout(rate,seed=None))
参数名参数值含义
rate0-1之间每个元素以rate的概率丢弃,也就是变成了0,在训练和预测时都生效(?)
seed随机种子

6.2.3 选择优化器和指定损失函数

model.compile(loss=' ', optimizer=' ', metrics=' ')

参数名参数值含义
loss损失函数
loss’mse’均方差损失函数
loss‘categorical_crossentropy’/'spare_categorical_crossentropy多分类交叉熵损失函数(当使用one-hot编码时用前一个)
loss’binary_crossentropy’二分类交叉熵损失函数(与激活函数 Sigmoid 搭配使用)
optimizer优化器
optimizer‘sgd’优化器
optimizer‘adagrad’优化器
optimizer‘adadelta’优化器
optimizer‘adam’优化器
metrics训练模型时的评价指标
metrics‘accuracy’
metrics‘binary_accuracy’二分类
metrics‘categorical_accuracy’多分类

6.2.4 训练模型

model.fit(x_train, y_train, batch_size= , epochs=10,shuffle= ,validation_data=(x_val, y_val))
参数名参数值含义
x_train, y_train训练数据
batch_size数字批量大小
epochs数字迭代次数
shuffle’true’/‘false’每轮训练前是否打乱数据
validation_data(测试集的输入特征,测试集的标签)划分测试集数据,与validation_split二选一
validation_split0-1之间的小数划分测试集数据,与validation_data二选一,测试集于训练集的比例
validation_freq默认为1测试频率,每隔多少轮训练并使用测试集计算和输出一次评测指标
verbose控制输出信息显示的方式
verbose0不在标准输出流输出
verbose1输出进度条记录
verbose2每个epoch输出一行记录

6.2.5 评估模型

score = model.evaluate(x_test,y_test,batch_size = 32)

6.2.6 使用模型

model.predict(x, batch_size, verbose)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值