说在前面
在开发之前, 要去python库官网上查看是否有帮助的库。 结合百度和pypi.org网站直接寻找需要的库。
库安装方法:1pip安装 2.文件安装:UCI页面需要翻墙 https://www.lfd.uci.edu/~gohlke/pythonlibs 或者conda提供的那些网站也行。
文件安装:下载UCI、whl文件之后,又要使用 pip install 文件来安装 放到lib文件夹
vscode特殊:通常把要处理的文件放在一个工作文件下,方便输出文件位置和调用。
一、文件操作
1.1 目录库 os: import os
os.path :用于获取文件的基本信息
import os
输出文件的绝对路径:os.path.abspath(path);
file_path = os.path.abspath('test.py')
print(file_path)
>>> c:\Users\YHW\Desktop\test_`1
也可以直接存储文件路径:右键文件,属性,查看完整地址复制过来
file_path = "C:\\Users\\YHW\\Desktop\\matlabprg"
python中转义字符在自己输入时\\需要成对输入,不然会有报错,或者/反斜杠表示替代
文件存在标志:os.path.exists(path)
如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。
print(os.path.exists('test.py'))
>>> True
获取工作文件夹路径:
print(os.getcwd())
c:\Users\YHW\Desktop\test_`1
合并文件目录路径和文件名:
file_path = os.path.join( os.getcwd(),"corpus_POS.txt" ) #据编译器决定是否添加/分隔
print(file_path)
c:\Users\YHW\Desktop\test_`1\corpus_POS.txt
Linux系统下常见,把path中包含的"~"和"~user"转换成用户目录:
os.path.expanduser("路径")
根据环境变量的值替换path中包含的"$name"和"${name}":
os.path.expandvars("路径")
文件路径切分成路径和文件名:
os.path.spilt("路径")
spilt并非os下才能使用!
返回一个元组,进行读取即可
修改当前工作文件夹目录:
查看当前工作目录
file = os.getcwd();
file = print("当前工作目录为 %s" % file)
>>> c:\Users\YHW\Desktop\test_`1
修改当前工作目录
os.chdir( "c:\Users\YHW\Desktop\matlabprg" )
返回某个文件夹中包含的文件名字的列表:
path = "c:\\Users\\YHW\\Desktop\\test_`1"
dirs = os.listdir( path )
for file in dirs:
print (file)
>>>
.vscode
1_tutorial_1or2hours.ipynb
animalphoto
dvsc.ipynb
animal_model.h5
test.py
创建文件夹:
path = "路径"
#一般与文件是否存在结合
os.path.exists(path)
if(False):
os.mkdir( path, 0755 )#0755mode设置权限,查表
进程管理:
进程管理 python文件打开其他文件或者软件的操作 调用其他程序
import os
os.system("文件路径")
还有许多其他的函数
os.cpu_count() CPU数量
os.getlogin() 获得用户登录名
print(os.getlogin())
print(os.path.abspath('kalman.py'))
csv文件:二维列表 csv格式:逗号分割标准格式,类似表格
1.2 文件IO库
——除了python自带的open()函数以外,其他的库都会提供自己的文件读取流也可以。
pandas打开文件
import pandas as pd
pd.read_excel("Excel文件路径名") 用pandas可以打开各种文件
numpy打开文件(仅npk:用于存储重建 ndarray 所需的数据、图形、dtype 和其他信息。)
import numpy as np
a = np.array([1,2,3,4,5])
np.save('outfile.npy',a)
b = np.load('outfile.npy')
print (b)
也可以用open
file_txt = open("路径/文件名","r", encoding="utf-8").read()
参数:文件位置、打开选项(读写选择),编码方式
file_txt.close()
file = "c:\\Users\\YHW\\Desktop\\test_`1"
f_test = open(file, "r", encoding="UTF-8")
f_test = open(FILENAME, "r", encoding="UTF-8")
realine读入一行
f_test.readline()
read读取指定的字符大小
txt =f_test.read()
readlines读取所有行,每一行为一个字符串,所有字符串形成列表
list=[]
list = f_test.readlines()
写一样
f.write(string)
f.writelines(list)
f.seek(参数)更改文件位置指针的位置
文本数据的一个常规操作:for把每一行读进来,把每一行的末尾\n换成空格,然后每一行用逗号分割,用readlines()效果一样
FILENAME = "machinelearning_add"
fo = open(FILENAME, encoding="UTF-8")
ls=[]
for line in fo:
line = line.replace("\n"," ")
ls.append(line.split(","))
fo.close()
ang=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
for item in ang:
print(ls[item])
输出结果如下:
二、数组Numpy库
2.1 创建数组,所有科学工具的基本: import numpy as np
创建数组,一维二维三维取决于内部中括号个数
a = np.array([[1,2,2],[2,5,7],[7,83,1]], dype = int)
dytpe选择内部的数据类型,甚至可以表示复数:complex64等
print (a)
>>>[[ 1 2 2]
[ 2 5 7]
[ 7 83 1]]
列表转数组:
a = [1,2,3,4,5]
ma = np.array(a)
注意区分“数组”和“矩阵”的区别,主要取决于数组类型和维度,下面的shape参数介绍
结构体数组:numpy 的数值类型实际上是 dtype 对象的实例,可以使用dype当做初始化函数
student = np.dtype([('age', 'int8'), ('marks', 'float')])
a = np.array([(21, 50),(18, 75)], dtype = student)
print(a)
创建数组,有序数组:arrange()
a = np.arange(5)
>>> [0 1 2 3 4]
0,1元素数组:
numpy.zeros(shape, dtype = float, order = 'C') 默认为浮点数,order排序方式
numpy.ones(shape, dtype = None, order = 'C')
x = np.ones([2,2], dtype = int)
y = np.zeros((5,5), dtype = int)
自定义数据类型
z = np.zeros((2,2), dtype = [('x', 'int8'), ('y', 'float')])
print(z)
z是二维矩阵,每一个元素是一个int和float组成的一个小元组元素。
>>> [[(0, 0.) (0, 0.)]
[(0, 0.) (0, 0.)]]
2.2 创建矩阵:
import numpy as np
import numpy.matlib
零矩阵和1矩阵
numpy.matlib.zeros(2,3)
numpy.matlib.ones(3,3)
单位矩阵:
numpy.matlib.eye() 函数返回一个矩阵,对角线元素为 1,其他位置为零。
print (np.matlib.eye(3, dtype = float))
>>> [[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
随机矩阵:
np.matlib.rand(3,3)
2.3 数组工具:
数组的rank秩:
ndarray.ndim
调整大小,重构数据大小reshape,重构大小必须满足!“列表转数组 数组行列乘积个数一样”两个条件!
a = np.arange(5)
b = a.reshape(1,5)
c = a.reshape(5,1)
d = np.array([[1,2],[4,5],[6,89]]).reshape(3,2)
f1 = np.arange(12).reshape(3,4)
f2 = np.arange(12).reshape(2,6)
>>> a = [0 1 2 3 4]
[[0 1 2 3 4]]
[[0]
[1]
[2]
[3]
[4]]
d = [[ 1 2]
[ 4 5]
[ 6 89]]
f1 = [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
f2 = [[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
数组格式,数组维度查看:shape
print (e.shape)
>>> (3, 2) 三行两列
a = np.arange(5)
a.shape
>>> (5,) 列表型数组,和列表类似,但是不属于矩阵,无法参与矩阵运算
其他类型转数组(列表转数组、元组转数组等)
a = range(0,5,1)
a = np.asarray(a)
print (a)
>>> [0 1 2 3 4]
2.4 数组的索引迭代、展平和组合:
切片索引与列表一样
a = np.arange(10)
从索引 2 开始到索引 7 停止,间隔为 2
b = a[2:7:2]
双列索引
c = c[0:10, 2:6]
分号左边是行索引,从0开始到10-1=9行;右边列索引,从第2列开始到第5列
print(b,c)
单个索引
f = np.arange(12).reshape(3,4)
f = f.reshape(2,6)
f[1][3]=522
>>> [[ 0 1 2 3 4 5]
[ 6 7 8 522 10 11]]
访问数组中的每一个元素:数组迭代循环
nditer()有可选参数
for x in np.nditer(a):
print (x, end=", " )
数组展平:展开数组,两个函数拷贝与不拷贝的关系
ndarray.flatten()
ndarray.ravel()
找到列表中最大值的索引:最小值也是一样(注意从0开始索引)
a = [1,2,3,4,5]
ma = np.array(a)
a.index(max(ma))
找到数组中的最大值:
max = ma.max()
找到最大值对应的索引值(序号):
默认axis是对整个数组索引,输入axis就是按axis轴进行最大值的索引
max = np.argmax(ma, axis = )
转置:
b = 某个二维数组.T
2.5 数组计算、矩阵计算:
运算符直接使用:a*b a+b a-b的结果就是 a 与 b 数组对应位相乘。(按位乘)
触发广播机制,如果两个数组维度不同,就把维度低的补齐到可以按位乘
a = np.array([[ 0, 0, 0],
[10,10,10],
[20,20,20],
[30,30,30]])
b = np.array([1,2,3])
print(a * b)
>>> [[ 0 0 0]
[10 20 30]
[20 40 60]
[30 60 90]]
2.6 多维数组计算:通过np提供的方法才能进行(与矩阵的运算方法一样)
矩阵乘法:dot()函数。矩阵乘法参考线性代数
a = [[1, 0], [0, 1]]
b = [[4, 1], [2, 2]]
c=np.dot(a, b)
>>> [[4 1]
[2 2]]
a = [[1, 0], [0, 1]]
b = [[4], [22]]
c=np.dot(a, b)
print(c)
>>> [[ 4]
[22]]
加减乘除:add(a,b),subtract(a,b),dot(a, b),divide(a,b)
矩阵点积:对应位置元素相乘
a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])
print (np.vdot(a,b))
逆矩阵:
x = np.array([[1,2],[3,4]])
y = np.linalg.inv(x)
>>> [[-2. 1. ]
[ 1.5 -0.5]]
2.7 其他计算函数:
将整形转换为其他进制:
print ('13 和 17 的二进制形式:')
a,b = 13,17
print (bin(a), bin(b))
print ('13 和 17 的位与:')
print (np.bitwise_and(13, 17))
>>> 13 和 17 的二进制形式:
0b1101 0b10001
13 和 17 的位与:
1
bitwise_or()按位或
invert()取反
left_shift() 左移 同右移
统计函数:
numpy.mean(ndarray) 平均数
numpy.average(ndarray) 加权平均数
np.std([1,2,3,4]) 标准差
np.var([1,2,3,4]) 方差
三、绘图库matlpotlib
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(1,11)
y = 2 * x + 5
z = 3 * x**2 + 2
plt.title("This is title don't support chinese")
plt.xlabel("x axis ")
plt.ylabel("y axis ")
plt.plot(x,y,"ob")
plt.plot(x,z,"-g")
绘图命令
plt.show()
通过plot后面的选项可以设置颜色和线段类型,下图
四、 python其他常见库:
4.1 random库、时间函数库:
#random库的补充
import numpy as np #random的随机库生成数组形式的随机
import random as rd
#1.设置了相同随机数种子的随机数,会产生相同的随机数
#如果不设置种子,那么就会产生随机的
rd.seed(10)
a= rd.random()
rd.seed(10)
b = rd.random()
c= rd.random()
print(a, b, c)
#2.各个函数
rd.randint(1,5)#整数随机
rd.uniform(3,5)#产生a~b之间的随机float数
rd.shuffle([1,4,5,12,8])#随机排序
#时间函数,包括获取时间,性能优化等
import time
time.perf_counter()
#复数
z = 3.2 + 2.3j
print(z.real, z.imag)
- )4.2 exe可编译python程序打包库:pyinstaller
pip install pyinstaller
常用的指令:
-F name,-onefile 产生单个的可执行文件
-D dirname,--onedir 产生一个目录(包含多个文件)作为可执行程序
-i <xxx.ico> 产生的文件用xxx图片作为图标
命令行里使用 pyinstaller -i <image_name.ico> -F file_name.py