Python科學計算和可視化


---恢復內容開始---

一、Numpy

        NumPy(Numeric Python)系統是 Python 的一種開源的數值計算擴展。這種工具可用來存儲和處理大型矩陣,比 Python 自身的嵌套列表(nested list structure)結構要高效的多(該結構也可以用來表示矩陣(matrix))。據說 NumPy 將 Python 相當於變成一種免費的更強大的 MatLab 系統。

numpy 特性:開源,數據計算擴展,ndarray, 具有多維操作, 數矩陣數據類型、矢量處理,以及精密的運算庫。專為進行嚴格的數字處理而產生。

特點:運算速度快、消耗資源少。

默認使用 Anaconda 集成包環境開發。

1、numpy 屬性

幾種 numpy 的屬性:

  • ndim:維度

  • shape:行數和列數

  • size:元素個數

使用 numpy 首先要導入模塊

 1 import numpy as np #為了方便使用numpy 采用np簡寫 

列表轉化為矩陣:

1 array = np.array([[1,2,3],[2,3,4]])  #列表轉化為矩陣
2 print(array)
3 """
4 array([[1, 2, 3],
5       [2, 3, 4]])
6 """

numpy 的幾種屬性:

1 print('number of dim:',array.ndim)  # 維度
2 # number of dim: 2
3 
4 print('shape :',array.shape)    # 行數和列數
5 # shape : (2, 3)
6 
7 print('size:',array.size)   # 元素個數
8 # size: 6

2、Numpy 的創建 array

關鍵字

  • array:創建數組

  • dtype:指定數據類型

  • zeros:創建數據全為0

  • ones:創建數據全為1

  • empty:創建數據接近0

  • arrange:按指定范圍創建數據

  • linspace:創建線段

二、Matplotlib

         Matplotlib 是 Python 的繪圖庫。 它可與 NumPy 一起使用,提供了一種有效的 MatLab 開源替代方案。 它也可以和圖形工具包一起使用,如 PyQt 和 wxPython。

 matplotlib.pyplot 模塊可以畫折線圖,分為兩個步驟,分別是 pyplot.plot() 和 pyplot.show() ,前者負責畫圖,后者將畫好的圖展示出來。

基本使用:

1 import numpy as np
2 import matplotlib.pyplot as plt
3 x=np.linspace(0,6,100)
4 y=np.cos(2*np.pi*x)*np.exp(-x)+0.8
5 plt.plot(x,y,'k',color='r',linewidth=3,linestyle="-")
6 plt.show()

效果如圖:

三、雷達圖繪制

代碼如下:

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 import matplotlib
 4 matplotlib.rcParams['font.family']='YouYuan'
 5 matplotlib.rcParams['font.sans-serif']=['YouYuan']
 6 labels=np.array(['第一周','第二周','第三周','第四周','第五周','第六周'])
 7 nAttr=6
 8 data=np.array([100,100,96.7,100,110,70])
 9 angles=np.linspace(0,2*np.pi,nAttr,endpoint=False)
10 data=np.concatenate((data,[data[0]]))
11 angles=np.concatenate((angles,[angles[0]]))
12 fig=plt.figure(facecolor="white")
13 plt.subplot(111,polar=True)
14 plt.plot(angles,data,'bo-',color='red',linewidth=2)
15 plt.fill(angles,data,facecolor='orange',alpha=0.25)
16 plt.thetagrids(angles*180/np.pi,labels)
17 plt.figtext(0.5,0.95,'12號Regan_White_Lin的成績表',ha='center')
18 plt.grid(True)
19 plt.savefig('pic.JPG')
20 plt.show()

效果圖如下:

四、圖像手繪風格

代碼如下:

 1 from PIL import Image
 2 import numpy as np
 3 vec_el=np.pi/3.2
 4 vec_az=np.pi/3.
 5 depth=20.
 6 im=Image.open('111.jpg').convert('L')
 7 a=np.asarray(im).astype('float')
 8 grad=np.gradient(a)
 9 grad_x,grad_y=grad
10 grad_x=grad_x*depth/100.
11 grad_y=grad_y*depth/100.
12 dx=np.cos(vec_el)*np.cos(vec_az)
13 dy=np.cos(vec_el)*np.sin(vec_az)
14 dz=np.sin(vec_el)
15 A=np.sqrt(grad_x**2+grad_y**2+1.)
16 uni_x=grad_x/A
17 uni_y=grad_y/A
18 uni_z=1./A
19 a2=255*(dx*uni_x+dy*uni_y+dz*uni_z)
20 a2=a2.clip(0,255)
21 im2=Image.fromarray(a2.astype('uint8'))
22 im2.save('new.jpg')

效果圖前后對比:

五、繪制數學模型

代碼如下:

 1 import numpy as np
 2 import matplotlib.pyplot as plt 
 3 theta=np.arange(0,2*np.pi,0.02) 
 4 plt.subplot(121,polar=True)
 5 plt.plot(theta,2*np.ones_like(theta),lw=2)  
 6 plt.plot(theta,theta/6,'--',lw=2)
 7 plt.subplot(122,polar=True) 
 8 plt.plot(theta,np.cos(5*theta),'--',lw=2) 
 9 plt.plot(theta,2*np.cos(4*theta),lw=2) 
10 plt.rgrids(np.arange(0.5,2,0.5),angle=45)
11 plt.thetagrids([0,45,90])
12 plt.show()

效果如下:

 

---恢復內容結束---


免責聲明!

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



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