Numpy與Matplotlib學習筆記

Numpy與Matplotlib讀書筆記2020-05-06
數組

1、numpyless

簡介dom

  • numpy 是用於處理含有同種元素的多維數組運算的第三方庫;
  • 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

 

 

 

 

 

 

 

 

 

 

 

 

  • 這些函數中,輸出參數y 可選,若是沒有指定,將建立並返回一個新的數組保存計算結果;若是指定參數,則將結果保存到參數中。例如,兩個數組相加能夠簡單地寫爲a+b,而np.add(a,b,a)則表示a+=b。

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

 

 

 

 

 

 

 

 

 

 

  • 其將返回一個布爾數組,它包含兩個數組中對應元素值的比較結果;

  • where()函數是三元表達式x if condition else 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庫

簡介 

  • matplotlib 是提供數據繪圖功能的第三方庫,其pyplot 子庫主要用於實現各類數據展現圖形的繪製;
  • matplotlib.pyplot 是matplotlib 的子庫,引用方式以下: >>>import matplotlib.pyplot as plt;
  • 上述語句與import matplotlib.pyplot 一致,as 保留字與import 一塊兒使用可以改變後續代碼中庫的命名空間,有助於提升代碼可讀性。簡單說,在後續程序中,plt 將代替matplotlib.pyplot;
  • matplotlib 庫由一系列有組織有隸屬關係的對象構成,這對於基礎繪圖操做來講顯得過於複雜。所以,matplotlib 提供了一套快捷命令式的繪圖接口函數,即pyplot 子模塊。pyplot 將繪圖所須要的對象構建過程封裝在函數中,對用戶提供了更加友好的接口。pyplot 模塊提供一批預約義的繪圖函數,大多數函數能夠從函數名辨別它的功能。

plt 庫的繪圖區域函數

plt.figure(figsize=None,facecolor=None) 建立一個全局繪圖區域
plt.axes(rect.axisbg='w') 建立一個座標系風格的子繪圖區域
plt.subplot(nrows,ncols,plot_number) 在全局繪圖區域中建立一個子繪圖區域
plt.subplots_adjust() 調整子繪圖區域的佈局

 

 

 

 

 

 

  • 使用figure()函數建立一個全局繪圖區域,而且使它成爲當前的繪圖對象,figsize參數能夠指定繪圖區域的寬度和高度,單位爲英寸。鑑於figure()函數參數較多,這裏採用指定參數名稱的方式輸入參數。 >>> plt.figure(figsize=(8,4))
  • subplot()都用於在全局繪圖區域內建立子繪圖區域,其參數表示將全局繪圖區域分紅nrows 行和ncols 列,並根據先行後列的計數方式在plot_number 位置生成一個座標系,實例代碼以下,三個參數關係如圖10.3 所示。其中,全局繪圖區域被風割成3x2 的網格,其中,在第4 個位置繪製了一個座標系;
  • axes()默認建立一個subplot(111)座標系,參數rec = [left,bottom,width,height]中四個變量的範圍都爲[0,1],表示座標系與全局繪圖區域的關係;axisbg 指背景色,默認爲white。

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()
View Code

 

 自定義手繪風

 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("圖像手繪化已完成")
View Code

這裏我用了我偶像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()
View Code

相關文章
相關標籤/搜索