三岁学编程,小白逆袭第三天的笔记
参考资料:https://aistudio.baidu.com/aistudio/projectdetail/428055
Numpy库
使用方法:
导入库import numpy as np
数组创建
使用array()函数转换成为多维数组,可以是一切序列型的对象(包括其他数组)
import numpy as np #将列表转换为数组 array = np.array([[1,2,3], [4,5,6]]) print(array) [[1 2 3] [4 5 6]] #将列表转换为数组 array = np.array(((1,2,3), (4,5,6))) print(array) [[1 2 3] [4 5 6]]
这里面不能够a = np.array(1,2,3,4)这种形式,他只调用了array()函数并没有传入一个序列型数据!!!
创建初始占位符的几种方法:
① zeros() 指定长度或形状的全部为 0 的数组
②ones() 创建指定长度形状的 内容为 1 的数组
③empty() 创建一个数组,内容随机
emptyarray = np.zeros((2,3)) print(emptyarray) [[0. 0. 0.] [0. 0. 0.]] #dtype = 'int64'代表了是整型 emptyarray = np.ones((3,4), dtype='int64') print(emptyarray) [[1 1 1 1] [1 1 1 1] [1 1 1 1]] emptyarray = np.empty((3,4)) print(emptyarray) [[6.23042070e-307 1.42417221e-306 1.37961641e-306 1.27945651e-307] [1.24610383e-306 1.69118108e-306 8.06632139e-308 1.20160711e-306] [1.69119330e-306 1.29062229e-306 1.60217812e-306 1.37961370e-306]]
arange()函数生成一个指定内容的数字数组
使用方法类似与range()
使用方法:np.arange(a, b, c)
a:第一个内容
b:最后一个是(b-1)
c:按照c的步长进行
array = np.arange( 10, 31, 5 ) print(array) [10 15 20 25 30]
注:此处遵循左闭右开!!!
数组类型的查看
- 数组维度
数组名.ndim
- 数组形状
数组名.shape
- 数组个数
数组名.size
- 数组元素类型
数组名.dtype
array = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]]) print(array) #数组维度 print(array.ndim) #数组形状 print(array.shape) #数组元素个数 print(array.size) #数组元素类型 print(array.dtype) [[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]]#数组内容 2#维度 (4, 3)#形状 12#个数 int32#类型
修改数组(矩阵)的形状
用reshape()
array1 = np.arange(6) print(array1) [0 1 2 3 4 5] [[0 1 2] [3 4 5]]
注意:文文老师千叮咛万嘱咐,在里面改变形状可以,但是数据的量不能改变,不然会溢出或无中生有。导致报错!
数组计算
数组计算会矢量化,计算都是元素级别,无需遍历即可运算
基本算法
- 加法两个数组相对应的位置进行加法计算
- 减法对应位置进行减法操作
- 乘法对应位置进行乘法操作
- 除法对应位置进行除法操作,结果是浮点型
- 幂每个位置分别进行幂操作
arr1 = np.array([[1,2,3],[4,5,6]]) arr2 = np.ones([2,3],dtype=np.int64) print(arr1 + arr2) print(arr1 - arr2) print(arr1 * arr2) print(arr1 / arr2) print(arr1 ** 2) [[2 3 4] [5 6 7]]#加法 [[0 1 2] [3 4 5]]#减法 [[1 2 3] [4 5 6]]#乘法 [[1. 2. 3.] [4. 5. 6.]]#除法(浮点型) [[ 1 4 9] [16 25 36]]#幂
矩阵乘法
使用方法 np.dot(矩阵1,矩阵2)
两个矩阵的形状必须是相反的
如(23)的h和(32)的宽度和高度相反的,不然会报错
ValueError: shapes (2,3) and (2,3) not aligned: 3 (dim 1) != 2 (dim 0)
计算方式:第一行和第一列分别相乘的和,第二行和第二列相乘的和,以此类推,不理解看题
arr3 = np.array([[1,2,3],[4,5,6]]) arr4 = np.array([[5, 6], [3,4], [1,2]]) print(np.dot(arr3,arr4)) [[14 20] [41 56]]
其他计算
sum() 求和
sum(矩阵名, axis=0)#axis=0求一列的和,=1求一行
max()#最大值
min()#最小值
mean()#平均值
argmax()#最大值下标
argmin()#最小值下标
矩阵转制、拍平
转制:矩阵名.transpose()
拍平:变成一维数组:矩阵名.flatten()
arr3_tran = arr3.transpose() print(arr3_tran) print(arr3.flatten()) [[1 4] [2 5] [3 6]] [1 2 3 4 5 6]
切片与读取
和列表读取类似,最多带上循环
arr5 = np.arange(0,6).reshape([2,3]) print(arr5) print(arr5[1]) print(arr5[1][2]) print(arr5[1,2]) print(arr5[1,:]) print(arr5[:,1]) print(arr5[1,0:2]) [[0 1 2] [3 4 5]] [3 4 5] 5 5 [3 4 5] [1 4] [3 4]
pandas库
pandas库,第三方库安装:pip install pandas
本人安装时超时了,可以下载.whl格式再进行安装
下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#traits
根据需要下载相应版本
导入库:import pandas as pd
参考地址:pandas中文网:https://www.pypandas.cn/
Series
Series是一种类似于一维数组的对象,它由一维数组(各种numpy数据类型)以及一组与之相关的数据标签(即索引)组成.
这里面的“键”可以重复
一个类似于键值对的样式
s = pd.Series(['a','b','c','d','e']) print(s) 0 a 1 b 2 c 3 d 4 e #索引值index可以重复 s = pd.Series(['a','b','c','d','e'],index=[100,200,100,400,500]) print(s) 100 a 200 b 100 c 400 d 500 e #字典转换为Series d = {'b': 1, 'a': 0, 'c': 2} pd.Series(d) b 1 a 0 c 2
可以通过Series的values和index属性获取其数组表示形式和索引对象
print(s.values) print(s.index) ['a' 'b' 'c' 'd' 'e'] Int64Index([100, 200, 100, 400, 500], dtype='int64')
可以通过索引的方式选取Series中的单个或一组值
print(s[100]) print(s[[400, 500]]) 100 a 100 c dtype: object 400 d 500 e dtype: object
Series中最重要的一个功能是:它会在算术运算中自动对齐不同索引的数据
Series 和多维数组的主要区别在于, Series 之间的操作会自动基于标签对齐数据。因此,不用顾及执行计算操作的 Series 是否有相同的标签。
当数据缺失时会用NaN
自动补齐
obj1 = pd.Series({"Ohio": 35000, "Oregon": 16000, "Texas": 71000, "Utah": 5000}) obj2 = pd.Series({"California": np.nan, "Ohio": 35000, "Oregon": 16000, "Texas": 71000}) print(obj1 + obj2) California NaN Ohio 70000.0 Oregon 32000.0 Texas 142000.0 Utah NaN dtype: float64
DataFrame
DataFrame是一个表格型的数据结构,类似于Excel或sql表
它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)
DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)
用多维数组字典、列表字典生成 DataFrame
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'], 'year': [2000, 2001, 2002, 2001, 2002], 'pop': [1.5, 1.7, 3.6, 2.4, 2.9]} frame = pd.DataFrame(data) print(frame) state year pop 0 Ohio 2000 1.5 1 Ohio 2001 1.7 2 Ohio 2002 3.6 3 Nevada 2001 2.4 4 Nevada 2002 2.9
#如果指定了列顺序,则DataFrame的列就会按照指定顺序进行排列 frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop']) print(frame1) year state pop 0 2000 Ohio 1.5 1 2001 Ohio 1.7 2 2002 Ohio 3.6 3 2001 Nevada 2.4 4 2002 Nevada 2.9
如果遇到了没有数据一样会用NaN
进行填充
PIL库
PIL库是一个具有强大图像处理能力的第三方库。
安装:cmd格式下pip install pil
使用方法: from PIL import *
Image
导入from PIL import Image
读取图片等
Image.open()
读取图
图片名.show
调用计算机软件读取图片
图片名.mode
返回图片模式(RGB, RGBA)
图片操作
图片名.rotate()
图片旋转()里面填写的是度数默认逆时针旋转
图片名.ceop()
图片裁剪括号里面是裁剪位置的左上与右下坐标
图片名.resize()
图片缩放,括号里面为照片大缩放后的大小
图片名.transpose(Image.FLIP_TOP_BOTTOM)
图片上下镜像
图片名.transpose(Image.FLIP_LEFT_RIGHT)
图片左右镜像
Matplotlib库
安装:cmd下pip install Matplotlib
参考地址:Matplotlib中文网:https://www.matplotlib.org.cn
导入:import matplotlib.pyplot as plt
通过构建x 和y的关系生成图片
x = np.linspace(-1,1,50) #等差数列 y = 2*x + 1 #传入x,y,通过plot()绘制出折线图 plt.plot(x,y) #显示图形 plt.show()
其他的去官网取经吧!