一、Numpy库
Numpy是什么
numpy很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。
数组常用函数
1.where()
按条件返回数组的索引值
2.take(a,index)
从数组a中按照索引index取值
3.linspace(a,b,N)
返回一个在(a,b)范围内均匀分布的数组,元素个数为N个
4.a.fill()
将数组的所有元素以指定的值填充
5.diff(a)
返回数组a相邻元素的差值构成的数组
6.sign(a)
返回数组a的每个元素的正负符号
7.piecewise(a,[condlist],[funclist])
数组a根据布尔型条件condlist返回对应元素结果
8.a.argmax(),a.argmin()
返回a最大、最小元素的索引
改变数组维度
a.ravel(),a.flatten():
将数组a展平成一维数组
a.shape=(m,n),a.reshape(m,n):
将数组a转换成m*n维数组
3.a.transpose,a.T
转置数组a
数组组合
1.hstack((a,b)),concatenate((a,b),axis=1)
将数组a,b沿水平方向组合
2.vstack((a,b)),concatenate((a,b),axis=0)
将数组a,b沿竖直方向组合
3.row_stack((a,b))
将数组a,b按行方向组合
4.column_stack((a,b))
将数组a,b按列方向组合
数组分割
1.split(a,n,axis=0),vsplit(a,n)
将数组a沿垂直方向分割成n个数组
2.split(a,n,axis=1),hsplit(a,n)
将数组a沿水平方向分割成n个数组
数组修剪和压缩
1.a.clip(m,n)
设置数组a的范围为(m,n),数组中大于n的元素设定为n,小于m的元素设定为m
2.a.compress()
返回根据给定条件筛选后的数组
数组属性
1.a.dtype
数组a的数据类型
2.a.shape
数组a的维度
3.a.ndim
数组a的维数
4.a.size
数组a所含元素的总个数
5.a.itemsize
数组a的元素在内存中所占的字节数
6.a.nbytes
整个数组a所占的内存空间
7.a.astype(int)
转换a数组的类型为int型
数组计算
1.average(a,weights=v)
对数组a以权重v进行加权平均
2.mean(a),max(a),min(a),middle(a),var(a),std(a)
数组a的均值、最大值、最小值、中位数、方差、标准差
3.a.prod()
数组a的所有元素的乘积
4.a.cumprod()
数组a的元素的累积乘积
5.cov(a,b),corrcoef(a,b)
数组a和b的协方差、相关系数
6.a.diagonal()
查看矩阵a对角线上的元素
7.a.trace()
计算矩阵a的迹,即对角线元素之和
二、matplotlib库
一般函数
plt.savefig(‘test’, dpi = 600) :将绘制的图画保存成png格式,命名为 test
plt.ylabel(‘Grade’) : y轴的名称
plt.axis([-1, 10, 0, 6]) : x轴起始于-1,终止于10 ,y轴起始于0,终止于6
plt.subplot(3,2,4) : 分成3行2列,共6个绘图区域,在第4个区域绘图。排序为行优先。也可 plt.subplot(324),将逗号省略。
.plot函数
plt.plot(x, y, format_string, **kwargs):
x为x轴数据,可为列表或数组;
y同理;
format_string 为控制曲线的格式字符串;
**kwargs 第二组或更多的(x, y, format_string)
format_string: 由 颜色字符、风格字符和标记字符组成。
颜色字符:‘b’蓝色 ;‘#008000’RGB某颜色;‘0.8’灰度值字符串
风格字符:‘-’实线;‘–’破折线; ‘-.’点划线; ‘:’虚线 ; ‘’‘’无线条
标记字符:‘.’点标记 ‘o’ 实心圈 ‘v’倒三角 ‘^’上三角
eg: plt.plot(a, a1.5, ‘go-’, a, a2, ‘*’) 第二条无曲线,只有点
.plot 显示中文字符
pyplot默认并不支持中文显示,需要 rcParams 修改字体来实现
rcParams的属性:
‘font.family’ 用于显示字体的名字
‘font.style’ 字体风格,正常’normal’ 或斜体’italic’
‘font.size’ 字体大小,整数字号或者’large’ ‘x-small’
plt子绘图区域
plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1):设定网格,选中网格,确定选中行列区域数量,编号从0开始。
eg:
plt.subplot2grid((3, 3), (1, 0), colspan = 2) , (3,3)表示分为3行3列,(1,0)表示选中第1行,第0列的区域进行绘图,colspan=2表示在选中区域的延伸。
Plot的图表函数
plt.plot(x,y , fmt) :绘制坐标图
plt.boxplot(data, notch, position): 绘制箱形图
plt.bar(left, height, width, bottom) : 绘制条形图
plt.barh(width, bottom, left, height) : 绘制横向条形图
plt.polar(theta, r) : 绘制极坐标图
plt.pie(data, explode) : 绘制饼图
plt.scatter(x, y) :绘制散点图
plt.hist(x, bings, normed) : 绘制直方图
三、应用
(1)绘制雷达图
import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams['font.family']='YouYuan' matplotlib.rcParams['font.sans-serif']=['YouYuan'] labels=np.array(['第一周','第二周','第三周','第四周','第五周','第6周']) nAttr=6 data=np.array([100,100,92,100,100,80]) angles=np.linspace(0,2*np.pi,nAttr,endpoint=False) data=np.concatenate((data,[data[0]])) angles=np.concatenate((angles,[angles[0]])) fig=plt.figure(facecolor="white") plt.subplot(111,polar=True) plt.plot(angles,data,'bo-',color='yellow',linewidth=2) plt.fill(angles,data,facecolor='pink',alpha=0.25) plt.thetagrids(angles*180/np.pi,labels) plt.figtext(0.5,0.95,'12号amao的成绩表',ha='center') plt.grid(True) plt.savefig('dota_radar.JPG') plt.show()
画出的雷达图如下
(2)将图片处理成手绘风
from PIL import Image import numpy as np vec_el=np.pi/3.2 vec_az=np.pi/3. depth=20. im=Image.open('D:\\python\\11.jpg').convert('L') a=np.asarray(im).astype('float') grad=np.gradient(a) grad_x,grad_y=grad grad_x=grad_x*depth/100. grad_y=grad_y*depth/100. dx=np.cos(vec_el)*np.cos(vec_az) dy=np.cos(vec_el)*np.sin(vec_az) dz=np.sin(vec_el) A=np.sqrt(grad_x**2+grad_y**2+1.) uni_x=grad_x/A uni_y=grad_y/A uni_z=1./A a2=255*(dx*uni_x+dy*uni_y+dz*uni_z) a2=a2.clip(0,255) im2=Image.fromarray(a2.astype('uint8')) im2.save('fcityHandDraw.jpg')
效果图如下
(3)绘制数学图
import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams['font.family']='SimHei' matplotlib.rcParams['font.sans-serif']=['SimHei'] plt.plot([1,1.2,1.5,2,2.3,4],[1,1.1,2,2.5,3,3.3]) plt.title("amao") plt.xlabel('时间(s)') plt.ylabel('距离 (m)') plt.xticks([1,2,3,4,5],[r'$\pi/3$',r'$2\pi/3$',r'$\pi$',r'$4\pi/3$',r'$5\pi/3$']) plt.show()
效果图如下