Numpy与Matplotlib读书笔记2020-05-06
数组
1、numpyless
简介dom
numpy 库还包括三角运算函数、傅里叶变换、随机和几率分布、基本数值统计、位运算、矩阵运算等很是丰富的功能;ide
numpy 库处理的最基础数据类型是由同种元素构成的多维数组(ndarray),简称“数组”;函数
数组中全部元素的类型必须相同,数组中元素能够用整数索引,序号从0开始。ndarray 类型的维度(dimensions)叫作轴(axes),轴的个数叫作秩(rank)。一维数组的秩为1,二维数组的秩为2,二维数组至关于由两个一维数组构成;布局
因为numpy 库中函数较多且命名容易与经常使用命名混淆,建议采用以下方式引用numpy 库: >>>import numpy as np;ui
其中,as 保留字与import 一块儿使用可以改变后续代码中库的命名空间,有助于提升代码可读性。简单说,在程序的后续部分中,np 代替numpy。spa
numpy 库经常使用的建立数组函数3d
函数 | 描述 |
np.array([x,y,z],dtype=int) | 从Python列表和元祖创造数组 |
np.arange(x,y,i) | 建立一个由x到y,以i为步长的数组 |
np.linspace(x,y,n) | 建立一个由x到y,等分红n个元素的数组 |
np.indices((m,n)) | 建立一个m行n列的矩阵 |
np.random.rand(m,n) | 建立一个m行n列的随机数组 |
np.ones((m,n),dtype) | 建立一个m行n列全1的数组,dtype是数据类型 |
np.empty((m,n),dtyoe) | 建立一个m行n列全0的数组,dtype是数据类型 |
numpy 库的算术运算函数code
函数 | 描述 |
np.add(x1,x2[,y]) | y=x1+x2 |
np.subtract(x1,x2[,y]) | y=x1-x2 |
np.multiply(x1,x2[,y]) | y=x1*x2 |
np.divide(x1,x2[,y]) | y=x1/x2 |
np.floor_divide(x1,x2[,y]) | y=x1//x2 |
np.negative(x[,y]) | y=-x |
np.power(x1,x2[,y]) | y=x1**x2 |
np.remainder(x1,x2[,y]) | y=x1%x2 |
numpy 库的比较运算函数
函数 | 符号概述 |
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_equal(x1,x2[,y]) | y=x1>=x2 |
np.where(condition[x,y]) | 根据给出的条件判断输出x仍是y |
其将返回一个布尔数组,它包含两个数组中对应元素值的比较结果;
numpy 库的其余运算函数
函数 | 描述 |
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]) | 圆整,取每一个元素为最近的整数,保留数据类型 |
np.exp(x[,out]) | 计算每一个元素的指数值 |
np.log(x),np.log10(x),np.log2(x) | 计算天然对数(e),基于10,2的对数 |
2、matplotlib库
简介
plt 库的绘图区域函数
plt.figure(figsize=None,facecolor=None) | 建立一个全局绘图区域 |
plt.axes(rect.axisbg='w') | 建立一个坐标系风格的子绘图区域 |
plt.subplot(nrows,ncols,plot_number) | 在全局绘图区域中建立一个子绘图区域 |
plt.subplots_adjust() | 调整子绘图区域的布局 |
plt 库的读取和显示函数
函数 | 描述 |
plt.legend() | 在绘图区域中方式绘图标签(也称图注) |
plt.show() | 显示建立的绘图对象 |
plt.matshow() | 在窗口显示数组矩阵 |
plt.inshow() | 在axes上显示图像 |
plt.imsave() | 保存数组为图像文件 |
plt.imread() | 从图像文件中读取数组 |
plt 库的基础图表函数
操做 | 描述 |
plt.plot(x,y,label,color,width) | 根据x,y数组绘制直/曲线 |
plt.boxplot(data,notch,position) | 绘制一个箱型图(Box-plot) |
pli.bar(left,height,width,bottom) | 绘制一个条形图 |
plt.barh(bottom,width,height,left) | 绘制一个横向条形图 |
plt 库的基础图表函数
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.steo(x,y,where) | 绘制步阶图 |
plt.hist(x,bins,normed) | 绘制直方图 |
将Python123中做业成绩绘制成雷达图
1 import numpy as np 2 import matplotlib.pyplot as plt 3 4 #标签 5 labels = np.array(['第一周','第二周','第三周','第四周','第五周','第六周']) 6 #数据个数 7 dataLenth = 6 8 #数据 9 data = np.array([50,100,93,107,110,60]) 10 11 angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False) 12 data = np.concatenate((data, [data[0]])) # 闭合 13 angles = np.concatenate((angles, [angles[0]])) # 闭合 14 15 fig = plt.figure() 16 ax = fig.add_subplot(111, polar=True)# polar参数!! 17 ax.plot(angles, data, 'bo-', linewidth=2)# 画线 18 ax.fill(angles, data, facecolor='r', alpha=0.55)# 填充 19 ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties="SimHei") 20 ax.set_title("马晓嘉(学号:2019310143026)成绩雷达图", va='bottom', fontproperties="SimHei") 21 ax.set_rlim(0,110) 22 ax.grid(True) 23 plt.show()
自定义手绘风
1 from PIL import Image 2 import numpy as np 3 4 a = np.asarray(Image.open("d:\GEM.jpg").convert('L')).astype('float') 5 6 depth = 10. #(0-100) 7 grad = np.gradient(a) #取图像灰度的梯度值 8 grad_x, grad_y = grad #分别取横纵图像的梯度值 9 grad_x = grad_x*depth/100. 10 grad_y = grad_y*depth/100. 11 A = np.sqrt(grad_x**2 + grad_y**2 + 1.) 12 uni_x = grad_x/A 13 uni_y = grad_y/A 14 uni_z = 1./A 15 16 vec_el = np.pi/2.2 # 光源的俯视角度,弧度值 17 vec_az = np.pi/4. # 光源的方位角度,弧度值 18 dx = np.cos(vec_el)*np.cos(vec_az) #光源对x 轴的影响 19 dy = np.cos(vec_el)*np.sin(vec_az) #光源对y 轴的影响 20 dz = np.sin(vec_el) #光源对z 轴的影响 21 22 b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) #光源归一化 23 b = b.clip(0,255) 24 25 im = Image.fromarray(b.astype('uint8')) #重构图像 26 im.save('GEM.jpg') 27 print("图像手绘化已完成")
这里我用了我偶像GEM邓紫棋的新专辑图片,来看看效果吧!
使用matplotlib绘制sinx,cosx图像
1 from matplotlib import pyplot as plt 2 import numpy as np 3 plt.figure(figsize=(4,2))#生成的图片的大小 4 x = np.linspace(-2 * np.pi,2*np.pi,100)#设置一个序列(-2pi,2pi,之间设置100个点) 5 y = np.sin(x)#须要绘制的函数 6 y1 = np.cos(x) 7 8 plt.ylim(-1,1)#限制y轴的范围 9 plt.xlim(-4,4)#x轴的范围 10 11 plt.xlabel("X") 12 plt.ylabel("Y") 13 plt.title("sinx cosx ") 14 plt.plot(x,y,label="sinx") 15 plt.plot(x,y1,label = "cosx") 16 plt.text(1,1,"Text",fontdict={'size':16,'color':'r'}) 17 plt.annotate('sin(np.pi)=',xy =(-np.pi,0),xytext=(-np.pi,2),fontsize=16, 18 arrowprops = dict(facecolor='black',shrink=0.01))#设置注释 19 plt.show()