一、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()
效果圖如下