一、numpy
(一)书上学习笔记
1.概况
Python 的标准库提供了一个array类型,用于保存数组类型数据,然而这个类型不支持多维数据,处理函数也不够丰富,不适合数值运算。因此引入了第三方库numpy。
numpy库处理的最基础数据类型是由同种元素组成的多维数组(ndarray),简称“数组”。数组中所有元素的类型必须相同,数组中元素可以用整数索引,序号从0开始。ndarray类型的维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。一维数组的秩为1,二维数组的秩为2,二维数组相当于由两个一维数组构成。
array类型和ndarray类型的区别如下:
由于numpy库中函数较多切命名容易与常用命名混淆,建议采用如下方式引用numpy库:
import numpy as np #给numpy库起别名为np
2.库解析
①numpy库常用的数组创建函数(七个)
np.array([x,y,z],dtype = int) #从Python列表和元组创造数组
import numpy as np
lst = [1,2,3,4]
yu = (1,2,3)
a = np.array(lst,float)
b = np.array(yu,int)
print(a)
print(b)
print(type(a))
print(type(b))
print(np.array(("a","b","c"),str))
#输出结果为:
[1. 2. 3. 4.]
[1 2 3]
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
['a' 'b' 'c']
np.arange(x,y,i) #创建一个由x到y,以i为步长的数组【前闭后开】
print(np.arange(1,6,1))
#运行结果为:
[1 2 3 4 5] #注意到x和y的取值为前闭后开的特点
np.linspace(x,y,n) #创建一个由x到y,等分成n个元素的数组【与Matlab中的用法相同】
np.indices((m,n)) #创建一个m行n列的矩阵
np.random.rand(m,n) #创建一个m行n列的随机数组
print(np.random.rand(3,4))
#运行结果为:
[[0.96776646 0.06157409 0.71336763 0.46663309]
[0.68123245 0.99764803 0.73261745 0.17772861]
[0.82573963 0.65535179 0.62535591 0.5605896 ]]
np.ones((m,n),dtype) #创建一个m行n列全1的数组,dtype是数据类型
np.empty((m,n),dtype) #创建一个m行n列全0的数组,dtype是数据类型
②ndarray类的常用属性(七个)
数组在numpy中被当做对象,可以采用<a>.<b>()方式调用一些方法。
ndarray.ndim:数组轴的个数,也被称作秩
ndarray.shape:数组在每个维度上大小的整数元组
ndarray.size :数组元素的总个数
ndarray.dtype:数组元素的数据类型,dtype类型可以用与创建数组
ndarray.itemsize:数组中每个元素的字节大小
ndarray.data:包含实际数组元素的缓冲区地址
ndarray.flat:数组元素的迭代器
a = np.random.rand(3,4) #生成ndarray类型的东西赋值给a
print(a)
print(a.ndim)
print(a.shape)
print(type(a.shape))
print(a.size)
print(a.dtype)
print(a.itemsize)
print(a.data)
print(a.flat)
#运行结果:
[[0.49107822 0.65403825 0.01807861 0.97796751]
[0.4674807 0.62945716 0.50264589 0.33967044]
[0.37201271 0.24275369 0.71666452 0.83857991]]
2
(3, 4)
<class 'tuple'>
12 # 3*4=12
float64
8
<memory at 0x00000266ABCD65A0>
<numpy.flatiter object at 0x00000266A97D7E00>
③ndarray类的形态操作方法(5个)
ndarray.reshape(n,m):不改变数组ndarray,返回一个维度为(n,m)的数组
ndarray.resize(new_shape):与reshape()作用相同,直接修改数组ndarray
辨析reshape和resize
one. reshape返回一个新的数组,而resize会直接修改原数
a = np.ones((3,4),int) #生成ndarray类型的东西赋值给a
print(a)
print(a.reshape(2,6))
print(a)
print(a.resize(2,6))
print(type(a.resize((2,6))))
print(a)
#运行结果为:
[[1 1 1 1]
[1 1 1 1] #原来a的模样
[1 1 1 1]]
[[1 1 1 1 1 1]
[1 1 1 1 1 1]] #在reshape作用下产生的新数组的模样
[[1 1 1 1]
[1 1 1 1] #数组a不发生改变,还是原来的3*4的模样
[1 1 1 1]]
None #resize作用下不返回任何类型,只修改原来的数组a
<class 'NoneType'>
[[1 1 1 1 1 1]
[1 1 1 1 1 1]] #原来的数组a发生了结构上的改变
two. reshape可以通过参数指定新数组的形状,而resize可以通过参数指定新数组的形状或者直接指定要改变的维度大小。
three. reshape不改变原数组的大小,而resize会在必要时添加或删除元素以满足新形状的要求。
a = np.ones((3,4),int) #生成ndarray类型的东西赋值给a
print(a.reshape(2,3))
#运行结果为:
ValueError: cannot reshape array of size 12 into shape (2,3)
【出错】:a的size为3*4=12,而reshape不可改变size,即a.reshape(m,n)中,m*n = 3*4=12
a = np.array(((1,2,3,4),(4,5,6,7),(8,9,0,1),(2,3,4,5)),int) #生成ndarray类型的东西赋值给a
print(a)
a.resize(2,3)
print(a)
#运行结果为:
[[1 2 3 4]
[4 5 6 7]
[8 9 0 1]
[2 3 4 5]]
[[1 2 3]
[4 4 5]]
ndarray.swapaxes(ax1,ax2):将数组n个维度中任意两个维度进行调换
ndarray.flatten():对数组进行降维,返回一个折叠后的一维数组。相当于平铺数组中的数据,该功能在矩阵运算及图像处理中用处很大。
ndarray.ravel():作用同np.flatten(),但是返回数组的一个视图
Q:展平函数ravel和flatten及两者的区别?
ravel()和flatten()是将多维数据展平为一维数据,功能相同,区别在于一个是引用操作,一个是复制操作。ravel()展平数据后,修改后面的数据会影响前面的数据,而flatten()展平数据后,不会影响前面的数据。
④ndarray类的索引和切片方法(5个)
⑤numpy库的算数运算函数(8个)
⑥numpy库的比较运算函数——【返回数据类型为bool的数组】
np.equal(x1,x2[,y]) : y = x1 == x2
np.not_equal(x1,x2[,y]) : y = x1 != x2
np.less(x1,x2[,y]) : y = x1 < x2
np.less_equal(x1,x2[,y]) : y = x1 <= x2
np.greater(x1,x2[,y]) : y = x1 > x2
np.greater(x1,x3[,y]) : y = x1 >= x2
np.where(condition[x,y]) : 根据给出的条件判断输出x还是y【是三元表达式x if condition else y 的矢量版本】
⑦numpy库的其他运算函数(9个)【参数x的数据类型为ndarray】
np.abs(x) #计算基于元素的整型、浮点或复数的绝对值
np.sqrt(x) #计算每个元素的平方根
np.squre(x) #计算每个元素的平方
np.sign(x) #计算每个元素的符号: 1(+)、0、-1(-)
np.ceil(x) #计算大于或等于每个元素的最小值
np.floor(x) #计算小于或等于每个元素的最大值
np.rint (x[, out]) #圆整,取每个元素为最近的整数,保留数据类型
Q:参数out是什么?
out : ndarray
,None
或ndarray
和None
的元组
可选 存储结果的位置。如果提供,它必须具有传入的形状。如果未提供或None
,则返回新分配的数组。 元组(仅可作为关键字参数)的长度必须等于输出的数量。
参考链接
np.exp(x[, out]) #计算每个元素的指数值
np.log(x), np.log10(x), np.log2(x) #计算自然对数(e),基于10、2的对数,log(1+x)
(二)其他丰富的功能
包括:三角运算函数、傅里叶变换、随机和概率分布、基本数值统计、位运算、矩阵运算等。
numpy数学函数参考链接:
https://zhuanlan.zhihu.com/p/511299164https://zhuanlan.zhihu.com/p/511299164numpy学习 其他教程参考链接【够全面】
二、scipy
1.简单介绍
SciPy 是一个开源的 Python 算法库和数学工具包。
Scipy 是基于 Numpy 的科学计算库,用于数学、科学、工程学等领域,很多有一些高阶抽象和物理模型需要使用 Scipy。
SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
应用:
scipy 是一个用于数学、科学、工程领域的常用软件包,可以处理最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等。 。
SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
NumPy 和 SciPy 的协同工作可以高效解决很多问题,在天文学、生物学、气象学和气候科学,以及材料科学等多个学科得到了广泛应用。
2.学习教程链接索引
三、pandas
1.简单介绍
Pandas 是 Python 语言的一个扩展程序库,用于数据分析。
Pandas 名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分析)。
Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。
Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。
2.学习教程链接索引
四、matplotlib
(一)书上学习笔记
要点:matplotlib是提供数据绘图功能的第三方库,其pyplot字库主要用于实现各种数据展示图形的绘制。
1.概述
引用字库:
import matplotlib.pyplot as plt
为了正确显示中文字体,用以下代码更改默认设置,其中‘SimHei’表示黑体字。
字体名称 | 字体英文表示 |
宋体 | SimSun |
黑体 | SimHei |
楷体 | KaiTi |
微软雅黑 | Microsoft YaHei |
隶书 | LiSu |
仿宋 | FangSong |
幼圆 | YouYuan |
华文宋体 | STSong |
华文黑体 | STHeiti |
苹果丽中黑 | Apple LiGothic Medium |
matplotlib库由一系列有组织有隶属关系的对象构成,这对于基础绘图操作来说显得过于复杂。因此,matplotlib提供了一套快捷命令式的绘图接口函数,即pyplot子模块。pyplot将绘图所需的对象构建过程封装在函数中,对用户提供了更加友好的接口。pyplot模块提供了一批预定义的绘图函数,大多数函数可以从函数名辨别它们的功能。
2.matplotlib.pyplot库解析
子库matplotlib.pyplot库提供了操作和绘图函数。
①plt库绘图区域函数
plt.figure(figsize=None, facecolor=None) : 创建一个全局绘图区域,并且使它成为当前的绘图对象,figsize参数可以指定绘图区域的宽度和高度,单位为英尺。鉴于figure()函数参数比较多,这里采用指定参数名称的方式输入参数。
plt.figure(figsize = (8,4))
绘制图像之前也可以不调用figure()函数创建全局绘图区域,此时,plt子库会自动创建一个默认的绘图区域。可用以下代码显示绘图区域:
plt.show()
plt.axes(rect, axisbg-'w'): 创建一个坐标系风格的子绘图区域
axes()默认创建一个subplot(111)坐标系,参数rect = [ left,bottom,width,height]中4个变量的范围都为[0,1],表示坐标系与全局绘图区域的关系; axisbg指背景色,默认为write
plt.subplot(nrows, ncols, plot_number) : 在全局绘图区域中创建一个子绘图区域
subplot()用于在全局绘图区域内创建子绘图区域,其参数表示将全局绘图区域分成nrows行和ncols列,并根据先行后列的计数方式在plot_number位置生成一个坐标系。
plt.subplot(324)
#全局绘图区域被分割成3×2的网格,其中,在第四个位置绘制一个坐标系
plt.show()
plt.subplots_adjust() : 调整子绘图区域的布局
②plt库的读取和显示函数(6个)
plt.legend() :在绘图区域中放置绘图标签(也称图注)
plt.show() :显示创建的绘图对象
plt.matshow() :在窗口显示数组矩阵
plt.imshow():在axes上显示图像
plt.imsave():保存数组为图像文件
plt.imread():从图像文件中读取数组
③plt库的基础图表函数
plt.plot(x,y,label,color,width):根据x,y数组绘制直、曲线
plt.boxplot(data,notch,position):绘制一个箱型图(Box-plot)
plt.bar(left,height,width,bottom):绘制一个条形图
plt.barh(bottom,width,height,left):绘制一个横向条形图
plt.polar(theta,r):绘制极坐标图
plt.pie(data,explode):绘制饼图
plt.psd(x,NFFT = 256,pad_to,Fs):绘制功率谱密度图
plt.specgram(x,NFFT = 256,pad_to,F):绘制谱图
plt.cohere(x,y,NFFT = 256,Fs):绘制X-Y的相关性函数
plt.scatter():绘制散点图(x、y是长度相同的序列)
plt.step(x,y,where):绘制步阶图
plt.hist(x,bins,normed):绘制直方图
plt.contour(X,Y,Z,N):绘制等值线
plt.vlines():绘制垂线图
plt.stem(x,y,linefmt,markerfmt,basefmt):绘制曲线每个点到水平轴线的垂线
plt.plot_date():绘制数据日期
plt.plotfile():绘制数据后写入文件
Tips: plot()函数是用于绘制直线的最基础的函数,调用方式很灵活,x和y可以使numpy计算出的数组,并用关键字参数指定各种属性。其中label表示设置标签在图例(legend)中显示,color表示曲线的颜色,linewidth表示曲线的宽度。在字符串前后添加“$”符号,matplotlib会使用期内置的latex引擎绘制数学公式。
④plt库的标签设置函数(13个)
plt.figlegend(handles,label,loc):为全局绘图区域放置图注
plt.legend():为当前坐标图放置图注
plt.xlabel(s):设置当前x轴的标签
plt.ylabel(s):设置当前y轴的标签
plt.xticks(array,'a','b','c'):设置当前x轴刻度位置的标签和值
plt.yticks(array,'a','b','c'):设置当前y轴刻度位置的标签和值
plt.clabel(cs,v):为等值线图设置标签
plt.get_figlabels():返回当前绘图区域的标签列表
plt.figtext(x,y,s,fontdic):为全局绘图区域添加文字
plt.title():设置标题
plt.suptilte():为当前绘图区域添加文字
plt.text(x,y,s,fontdic,withdash):为坐标图轴添加注释
plt.annotate(note,xy,xytext,xycoords,textcoords,arrowprops):用箭头在指定数据点创建一个注释或一段文本
⑤plt库的区域填充函数(3个)
fill(x,y,c,color):填充多边形
fill_between(x,y1,y2,where,color):填充两条曲线围成的多边形
fill_betweenx(y,x1,x2,where,hold):填充两条水平线之间的区域
(二)其他学习资料
总结
初次面对如此多函数的库,还是会引起学习拖延。对于库的学习也许不在于完全记住而在于了解,了解有什么功能,了解如何使用,当需要用到的时候能够反应的过来。总的来说,还是得多实践,光是记估计是记不得什么的…
代码纯手敲也许有错乱…