天天看點

Python科學計算與可視化

Numpy庫

  numpy 是用于處理含有同種元素的多元數組運算的第三方庫,支援N維數組運算、處理大型矩陣、成熟的廣播函數庫、矢量運算、線性代數、傅裡葉變換、随機數生成,并可與C++/Fortran語言無縫結合。

數組中所有元素的類型必須相同,數組中元素可以用整數索引,序号從0開始。ndarray 類型的次元(dimensions)叫做軸(axes),軸的個數叫做秩(rank)。一維數組的秩為1,二維數組的秩為2,二維數組相當于由兩個一維數組構成。

numpy 庫常用的建立數組函數

np.array([x,y,z],dtyp=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),dtype) #建立一個m行n列全0的數組,dtype是資料類型      

ndarray 類的常用屬性

ndarray.nidm #數組軸的個數,也被稱作秩
ndarray.shape #數組在每個次元上大小的證書元組
ndarray.size #數組元素的總個數
ndarray.dtype #數組元素的資料類型,dtype類型可以用于建立數組中
ndarray.itemsize #數組中每個元素的位元組大小
ndarray.data #包含實際數組元素的緩沖區位址
ndarray.flat #數組元素的疊代器      

ndarray 類的形态操作方法

ndarray.reshape(n,m) #不改變數組ndarray,傳回一個次元為(n,m)的數組
ndarray.resize(new_shape) #與reshape()作用相同,直接修改數組ndarray
ndarray.swapaxes(ax1,ax2) #将數組n個次元中任意兩個次元進行調換
ndarray.flatten() #對數組進行降維,傳回一個折疊後的一維數組
ndarray.ravel() #作用同np.flatten(),但是傳回數組的一個視圖      

ndarray 類的索引和切片方法

x[i] #索引第i個元素
x[-i] #從後向前索引第i個元素
x[n:m] #預設步長為1,從前往後索引,不包含m
x[-m:-n] #預設步長為1,從後往前索引,結束位置為n
x[n,m,i] #制定i步長的由n到m的索引      

numpy 庫的算術運算函數

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的對數,log(1+x)      

Matplotlib庫

matplotlib子產品依賴于numpy子產品和tkinter子產品,可以繪制多種樣式的圖形,包括線圖、直方圖、餅狀圖、誤差線圖等等,圖形品質可滿足出版要求,是可視化的重要工具。

plt 子庫提供了一批操作和繪圖函數,每個函數代表對圖像進行的一個操作,比如建立繪圖區域、添加标注或者修改坐标軸等。

plt 庫的繪圖區域函數

plt.figure(figsize=None,facecolor=None) #建立一個全局繪圖區域
plt.axes(rect.axisbg=\'w\') #建立一個坐标系風格的子繪圖區域
plt.sublpot(nrows,ncols,plot_number) #在全局繪圖區域中建立一個子繪圖區域
plt.subplot_adjust() #調整子圖區域的布局      

plt 庫的讀取和顯示函數

plt.legend() #在繪圖區域中方式繪圖示簽
plt.show() #顯示建立的繪圖對象
plt.matshow() #在視窗顯示數組矩陣
plt.imshow() #在axes上顯示圖像
plt.imsave() #儲存數組為圖像檔案
plt.imread() #從圖像檔案中讀取數組      

plt 庫的基礎圖表函數

plt.polt(x,y,label,color,width) #根據x,y數組繪制直/曲線
plt.boxplot(data,notch,position) #繪制箱型圖
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,Fs) #繪制譜圖
plt.cohere(x,y,NFFT=256,Fs) #繪制X-Y的相關性函數
plt.scatter() #繪制散點圖
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() #繪制資料後寫入檔案      

plt 庫的坐标軸設定函數

plt.axis(\'v\',\'off\',\'equal\',\'scaled\',\'tight\',\'image\') #擷取設定軸屬性的快捷方法
plt.xlim(xmin,xmax) #設定目前x軸取值範圍
plt.ylim(ymin,ymax) #設定目前y軸取值範圍
plt.xscale() #設定x軸縮放
plt.yscale() #設定y軸縮放
plt.autoscale() #自動縮放軸視圖的資料
plt.thetagrids(angles,labels,fmt,frac) #設定極坐标網格theta的位置
plt.grid(on/off) #打開或者關閉坐标網格      

plt 庫的标簽設定函數

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.titile() #設定标題
plt.suptitle() #為目前繪圖區域添加中心标題
plt.text(x,y,s,fontdic,withdash) #為坐标圖軸添加注釋
plt.annotate(note,xy,xytext,xycoords,textdcoords,
                   arrowprops) #用箭頭在制定資料點建立一個注釋或一段文本      

plt 庫的區域填充函數

fill(x,y,c,color) #填充多邊形
fill_between(x,y1,y2,where,color) #填充兩條曲線圍城的多邊形
fill_between(y,x1,x2,where,hold) #填充兩條水準線之間的區域      

Python123成績雷達圖

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams[\'font.family\']=\'SimHei\'
matplotlib.rcParams[\'font.sans-serif\']=[\'SimHei\']
labels=np.array([\'第一周\',\'第二周\',\'第三周\',\'第四周\',\'第五周\',\'第六周\'])
nAttr=6
data=np.array([62.5,87.9,90,100,97.7,81.3])
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=\'g\',linewidth=2)
plt.fill(angles.data,facecolor=\'g\',alpha=0.25)
plt.thetagrids(angles*180/np.pi,labels)
plt.figtext(0.52,0.95,\'鹿丶泠的成績表\',ha=\'center\')
plt.grid(True)
plt.savefig(\'python123_score1.JPG\')
plt.show()      
Python科學計算與可視化