日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

手把手教你使用Numpy、Matplotlib、Scipy等5个Python库

發布時間:2025/3/15 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手把手教你使用Numpy、Matplotlib、Scipy等5个Python库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

導讀:用Python設計控制系統,你會用到接下來要介紹的幾個模塊:Numpy、Matplotlib、Scipy、Sympy和Python-Control。

作者:南裕樹(Yuki Minami)

來源:大數據DT(ID:hzdashuju)

01 Numpy

Numpy是用于數值計算的基礎包。

使用Numpy可以高速高效地進行各種數值計算、統計處理以及信號處理。

import?numpy?as?np

加載Numpy模塊后,就可以使用平方根(np.sqrt)、絕對值(np.abs)、三角函數(np.sin、np.cos、np.arcsin、np.arccos)、指數(np.exp)、對數(np.log、np.log10)、四舍五入(np.round)等基本的數值計算用的函數了。

此外,弧度(rad)和角度(deg)換算的函數np.rad2deg也包括在內,還可以使用圓周率(np.pi)。

復數通過在虛部后面添加j來表示??梢允褂胣p.imag來取出虛部。同樣,可以使用np.real來取出實部,用np.conj來求得共軛復數。

還可以進行向量和矩陣運算。可以使用np.array來定義向量和矩陣。

A?=?np.array([?[1,?2],?[-3,?4]]) print(A)[[?1??2][-3??4]]

可以使用T方法來求得轉置矩陣。

print(A.T)[[?1?-3][?2??4]]

可以使用np.linalg.inv來求得逆矩陣。

B?=?np.linalg.inv(A) print(B)[[?0.4?-0.2][?0.3??0.1]]

可以像下面這樣進一步求得矩陣對應的行列式的值、矩陣的秩、特征值以及范數。

np.linalg.det(A)?#行列式10.000000000000002np.linalg.matrix_rank(A)?#秩2w,?v?=?np.linalg.eig(A)?#特征值和特征向量 print('eigenvalue=',w) print('eigenvector=\n',v)eigenvalue=?[2.5+1.93649167j?2.5-1.93649167j] eigenvector=[[0.38729833-0.5j?0.38729833+0.5j][0.77459667+0.j??0.77459667-0.j?]]x?=?np.array([1,?2]) print(x) np.linalg.norm(x)2.23606797749979

此外,還可以使用np.arange構建數列。

Td?=?np.arange(0,?10,?1) print(Td)[0?1?2?3?4?5?6?7?8?9]

上例中構建了一個從0開始到10(不包含)為止,且間隔為1的數列。

02 Matplotlib

Matplotlib用于圖形描繪,可以用它制作各種類型的圖形和動畫。繪圖的具體例子可以參考它的主頁:

http://matplotlib.org/gallery.html

可以像下面這樣加載Matplotlib模塊。

import?matplotlib.pyplot?as?plt

讓我們來看一個繪圖的例子(見代碼段2.1)。

  • 代碼段2.1 繪圖

import?numpy?as?np import?matplotlib.pyplot?as?plt x?=?np.arange(0,?4?*?np.pi,?0.1) y?=?np.sin(x) plt.plot(x,?y)?#橫軸使用x,縱軸使用y繪圖 plt.xlabel('x')?#設定x軸的標簽 plt.ylabel('y')?#設定y軸的標簽 plt.grid()?#顯示網格 plt.show()

這樣可以畫出如圖2.9所示的圖形。

▲圖2.9 使用matplotlib繪圖的例子

如果需要對細節進行進一步的調整以做出更美觀的圖形,則僅僅這樣還是不夠的。此時需要如代碼段2.2所示采用能夠對細節進行調整的面向對象的繪圖方式。

  • 代碼段2.2 面向對象的繪圖

fig,?ax?=?plt.subplots()?#生成Figure和Axes對象 ax.plot(x,?y)?#在Axes對象中生成圖形 ax.set_xlabel('x') ax.set_ylabel('y') ax.grid() plt.show()

可以在Figure對象中生成Axes對象,并將數據傳遞給Axes對象的方法(.plot())來進行繪圖??梢赃M一步使用Axes對象的方法(.set_xlabel()等)來對圖形進行調整。雖然可以像代碼段2.1這樣,在沒有明確地生成對象的前提下描繪圖形,但是如果明確生成各個對象,就可以在繪圖的同時對細節進行調整。例如,可以如圖2.10所示,在Figure中生成兩個Axes對象。

▲圖2.10?在Figure中生成兩個Axes對象

可以使用代碼段2.3生成圖2.11。

  • 代碼段2.3?生成圖2.11的代碼

fig,?ax?=?plt.subplots(2,1)?#設置2行1列的子圖形x?=?np.arange(0,?4?*?np.pi,?0.1) y?=?np.sin(x) z?=?np.cos(x) w?=?y?+?z#生成第一個圖形 ax[0].plot(x,?y,?ls='-',?label='sin',?c='k') ax[0].plot(x,?z,?ls='-.',?label='cos',?c='k') ax[0].set_xlabel('x') ax[0].set_ylabel('y,?z') ax[0].set_xlim(0,?4*np.pi) ax[0].grid() ax[0].legend()#生成第二個圖形 ax[1].plot(x,?w,?color='k',?marker='.') ax[1].set_xlabel('x') ax[1].set_ylabel('w') ax[1].set_xlim(0,?4*np.pi) ax[1].grid(ls=':')fig.tight_layout()

▲圖2.11?繪制面向對象型的圖形

圖例可以通過在繪圖時使用label = 'hogehoge'添加,并在最后通過ax.legend()輸出。還可以使用類似x.legend(loc = 'best')這樣的語句來指定圖例的位置。指定位置時可以使用表2.1中的字符串或數值。

▼表2.1?指定圖例位置時使用的字符串和數值

線的類型可以通過linestyle = '-'或者ls = '-'來設定。符號與線型的關系如下所示。

  • -:實線 

  • -.:點畫線

  • --:虛線

  • ..:點線

線的粗細可以使用類似linewidth = 2或者lw = 2這樣的代碼來指定。線的顏色可以通過color = 'r'或者c = 'r'來指定。字符與顏色的關系如下所示。

  • b:藍

  • g:綠

  • r:紅

  • c:青

  • m:品紅

  • y:黃

  • k:黑

  • w:白

記號的類型通過marker = 'o'來指定。部分記號的類型如下所示:

"."? ","? "o"? "v"? "^"? "<"? ">"? "1"? "2"? "3"? "4"? "8"

"s"? "p"? "*"? "h"? "H"? "+"? "x"? "D"? "d"? "|"? "_"? "$x$"

實際的顯示效果(按照順序)如圖2.12所示。記號的大小可以像s = 10這樣設定。

▲圖2.12?記號的類型

可以使用fig.savefig("hogehoge.pdf")來保存圖形。

03 Scipy

Scipy是用于數值計算算法的擴展包,提供了信號處理、優化和統計等功能的函數,還包含了控制系統分析和設計用的函數。這里介紹用于求解微分方程的odeint。

試求下述微分方程的數值積分:

假設輸入為u(t):

代碼段2.4的輸出結果如圖2.13所示。通過def定義微分方程system,并將其與初始值y0和時間t一起傳遞給odeint。

  • 代碼段2.4 微分方程的數值積分

from?scipy.integrate?import?odeint import?numpy?as?np import?matplotlib.pyplot?as?plt#定義微分方程 def?system(y,?t):if?t?<?10.0:u?=?0.0else:u?=?1.0dydt?=?(-y?+?u)/5.0?return?dydt#通過設定初始值和時間求解微分方程 y0?=?0.5 t?=?np.arange(0,?40,?0.04) y?=?odeint(system,?y0,?t)#繪圖 fig,?ax?=?plt.subplots() ax.plot(t,?y,?label='y',?c='k') ax.plot(t,?1?*?(t>=10),?ls='--',?label='u') ax.set_xlabel('t') ax.set_ylabel('y,?u') ax.legend(loc='best') ax.grid(ls=':')

▲圖2.13?微分方程的數值計算

04 Sympy

Sympy是用于符號計算的模塊。通過它可以把變量當作符號處理并進行各種計算。例如,可以進行表達式展開、因式分解、微分、積分甚至是拉普拉斯變換。

import?sympy?as?sp? sp.init_printing() s?=?sp.Symbol('s') root?=?sp.solve(2?*?s**2?+5*s+3,?s) print(root)[-3/2,?-1]

在上面的例子中,我們通過Symbol將變量定義為字符,使用solve求得方程的根。如果使用init_printing(),還可以輸出LaTeX格式的結果。此時不要使用print,應直接輸入root。

使用expand可以進行表達式展開,使用factor可以進行因式分解。

f?=?sp.expand(?(s+1)*(s+2)**2,?s) print(f)s**3?+?5*s**2?+?8*s?+?4g?=?sp.factor(f,?s)? print(g)(s?+?1)*(s?+?2)**2

除了上面介紹的功能以外還有series(泰勒展開)、apart(部分分式分解)、laplace_transform(拉普拉斯變換)、inverse_laplace_transform(逆拉普拉斯變換)等功能。

05 Python-Control

本文通過實例介紹Python-Control函數。函數及其基本使用方法總結在表2.4~表2.8中,請讀者在閱讀過程中隨時查閱。如果系統sys表示成以下形式:

那么num就表示[bm,...,b0],den就表示[an,...a0],k就表示k,z就表示[z1,...,zm,p就表示[p1,...,pn]。如果系統sys表示成以下形式:

那么A就表示A,B就表示B,C就表示C,D就表示D。

可通過下述方法加載模塊。

import?control

也可以使用下述方法從模塊中導入類MATLAB函數。

from?control.matlab?import?*

▼表2.4 模型描述

▼表2.5 模型分析

▼表2.6 控制系統設計

▼表2.7 模型解析(from control import cannonical_form)

▼表2.8 控制系統設計(from control import mixsyn)

除了上面介紹的這些函數之外還有一些其他的方便實用的函數。

比如,求取根軌跡的函數rlocus、求取平衡降階模型的函數balred、求解李雅普諾夫方程的函數lyap、用于H2控制系統設計的函數h2syn以及用于H控制系統設計的函數hinfsyn等。

詳細內容可以參考Python Control Systems Library:

https://python-control.readthedocs.io/en/0.8.1/index.html

關于作者:南裕樹(Yuki Minami),大阪大學大學院工學研究科機械工學專業教授,京都大學大學院情報學研究科博士。主要研究領域包含制造技術、系統工程、深度學習等。

本文摘編自《用Python輕松設計控制系統》,經出版方授權發布。(ISBN:9787111688112)

《用Python輕松設計控制系統》

點擊上圖了解及購買

轉載請聯系微信:DoctorData

推薦語:面向用Python進行控制系統設計的人,邊學邊用Python進行編程實踐。重點闡述以狀態空間模型為對象的現代控制系統的設計。全書分七章,包括: Pythhon環境的構建、數據和流控制、反饋控制、狀態空間模型、閉環系統的控制設計、開環系統的控制設計、PID控制相位進延遲補償,以及穩健性控制數字實現的高級控制系統設計。

刷刷視頻👇

干貨直達👇

  • 收藏!數據分析、人工智能、產品經理等6個方向學習路線圖及參考書目

  • 盤點云原生的5大特征

  • 終于有人把云計算與數據庫的關系講明白了

  • 解決卡脖子問題:盤點中國工業軟件產業細分領域市場格局

更多精彩👇

在公眾號對話框輸入以下關鍵詞

查看更多優質內容!

讀書?|?書單?|?干貨?|?講明白?|?神操作?|?手把手

大數據?|?云計算?|?數據庫?|?Python?|?爬蟲?|?可視化

AI?|?人工智能?|?機器學習?|?深度學習?|?NLP

5G?|?中臺?|?用戶畫像?|?數學?|?算法?|?數字孿生

據統計,99%的大咖都關注了這個公眾號

👇

總結

以上是生活随笔為你收集整理的手把手教你使用Numpy、Matplotlib、Scipy等5个Python库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。