Numpy和matplotlib庫的學習


一、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()

效果圖如下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM