Python編程從入門到實戰(zhàn)-輕松過二級 (思政版)(第2版) 課件 ch07 數(shù)值處理與計算_第1頁
Python編程從入門到實戰(zhàn)-輕松過二級 (思政版)(第2版) 課件 ch07 數(shù)值處理與計算_第2頁
Python編程從入門到實戰(zhàn)-輕松過二級 (思政版)(第2版) 課件 ch07 數(shù)值處理與計算_第3頁
Python編程從入門到實戰(zhàn)-輕松過二級 (思政版)(第2版) 課件 ch07 數(shù)值處理與計算_第4頁
Python編程從入門到實戰(zhàn)-輕松過二級 (思政版)(第2版) 課件 ch07 數(shù)值處理與計算_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第二版▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍第7章數(shù)值處理與計算7.1math模塊和數(shù)學(xué)函數(shù)7.2random模塊和隨機函數(shù)7.3NumPy模塊和數(shù)值運算7.4time模塊和程序計時7.5應(yīng)用舉例7.1math模塊和數(shù)學(xué)函數(shù)在Python標(biāo)準(zhǔn)庫math中,提供了許多常用的數(shù)學(xué)函數(shù),包括三角函數(shù)、對數(shù)函數(shù)和其他通用數(shù)學(xué)函數(shù)math模塊包含兩個常量math.pi和math.e,分別對應(yīng)于圓周率π(3.141592653589793)和自然常數(shù)e(2.718281828459045)【例7.1】探索math模塊提供的功能>>>importmath#導(dǎo)入math模塊>>>help(math)#顯示math模塊的幫助信息>>>dir(math)#顯示math模塊的所有成員>>>help(math.radians)#顯示math.radians(角度轉(zhuǎn)換為弧度的函數(shù))的幫助信息>>>math.sin(math.radians(30))#計算30度角度的正弦值math模塊的API【例7.2】數(shù)學(xué)函數(shù)的使用示例(math_test.py):輸入三條邊長,如果可以構(gòu)成三角形,則求三角形的面積、周長、某邊長所對應(yīng)的高、最長邊長、最短邊長;否則,報錯:“不能構(gòu)成三角形”importmath#三角形三邊a、b、c,必須滿足:三條邊長均大于零,并且任意兩邊之和大于第三邊a=int(input("請輸入邊長a:"))b=int(input("請輸入邊長b:"))c=int(input("請輸入邊長c:"))if(a>0andb>0andc>0anda+b>canda+c>bandb+c>a):h=(a+b+c)/2#周長的一半

area=math.sqrt(h*(h-a)*(h-b)*(h-c))#面積

perimeter=a+b+c#周長

height_a=2*area/a#邊長a所對應(yīng)的高

max_side=max(a,b,c)#最長邊長

min_side=min(a,b,c)#最短邊長

print("三角形的三條邊為:{0}、{1}和{2}".format(a,b,c))print("三角形的面積為:{0:.2f}".format(area))print("三角形的周長為:{0:.2f}".format(perimeter))print("邊長A對應(yīng)的高為:{0:.2f}".format(height_a))print("三角形的最長的邊為:{0:.2f}".format(max_side))print("三角形的最短的邊為:{0:.2f}".format(min_side))else:print("三條邊:{0}、{1}和{2},不能構(gòu)成三角形".format(a,b,c))【例7.3】數(shù)學(xué)函數(shù)的使用示例(quadratic.py):求一元二次方程的實數(shù)解。其中,系數(shù)b和c由命令行參數(shù)所確定importmathimportsysb=float(sys.argv[1])c=float(sys.argv[2])discriminant=b*b-4.0*cifdiscriminant>=0:d=math.sqrt(discriminant)print("x1=",(-b+d)/2.0)print("x2=",(-b-d)/2.0)else:print("此方程無實數(shù)解")7.2random模塊和隨機函數(shù)random模塊包含各種偽隨機數(shù)生成函數(shù),以及各種根據(jù)概率分布生成隨機數(shù)的函數(shù)使用random模塊函數(shù)seed()可以設(shè)置偽隨機數(shù)生成器的種子>>>importrandom>>>random.seed(1)#設(shè)置種子為1>>>foriinrange(5):print(random.randint(1,5),end=',')#輸出:2,5,1,3,1,>>>foriinrange(5):print(random.randint(1,5),end=',')#輸出:4,4,4,4,2,>>>random.seed(1)#重新設(shè)置種子為1,結(jié)果重復(fù)>>>foriinrange(5):print(random.randint(1,5),end=',')#輸出:2,5,1,3,1,>>>random.seed(10)#重新設(shè)置種子為10>>>foriinrange(5):print(random.randint(1,5),end=',')#輸出:5,1,4,4,5,名稱說明示例結(jié)果(隨機)randrange(stop)返回隨機整數(shù)N,N屬于序列[0,stop)foriinrange(10):print(randrange(10),end=',')8,6,7,4,0,9,1,5,4,9,randrange(start,stop[,step])返回隨機整數(shù)N,N屬于序列[start,stop,step)foriinrange(10):print(randrange(1,5),end=',')3,4,1,2,3,4,4,4,1,1,randint(a,b)返回隨機整數(shù)N,使得a<=N<=b,即randrange(a,b+1)foriinrange(10):print(randint(1,5),end=',')1,2,5,5,1,1,1,2,3,4,getrandbits(k)返回隨機整數(shù)N,使得N的位(bit)長為kforiinrange(10):print(getrandbits(2),end=',')0,0,1,2,1,3,1,1,1,1,【例7.6】猜數(shù)游戲(guess.py)首先隨機產(chǎn)生一個1~100以內(nèi)的整數(shù),請用戶猜測具體是哪個數(shù),即:不斷從標(biāo)準(zhǔn)輸入讀取用戶的猜測值,并根據(jù)猜測值給出提示信息:“太大”、“太小”或“正確!”邏輯思維:以推理和演繹為特征,以數(shù)學(xué)學(xué)科為代表實驗思維:以實驗和驗證為特征,以物理學(xué)科為代表計算思維:以設(shè)計和構(gòu)造為特征,以計算機學(xué)科為代表importrandomsecret=random.randrange(1,101)guess=0whileguess!=secret:guess=int(input("請猜測一個100之內(nèi)的數(shù):"))if(guess<secret):print('太小')elif(guess>secret):print('太大')else:print('正確!')7.3NumPy模塊和數(shù)值運算NumPy庫是Python的數(shù)值計算擴展,用于高效存儲和處理數(shù)組和矩陣,許多科學(xué)計算庫(包括matplotlib、pandas、SciPy和SymPy等)都基于NumPy。NumPy是Python數(shù)值計算的基石,它提供了兩種基本的對象——ndarray(n-dimensionalarrayobject,n維數(shù)組對象,即數(shù)組)和ufunc(universalfunctionobject,通用函數(shù)對象)。ndarray是存儲單一數(shù)據(jù)類型的多維數(shù)組,而ufunc則是能夠?qū)?shù)組進行處理的通用函數(shù)數(shù)值運算模塊的基本使用Python的列表可以用作數(shù)組,但由于列表的元素可以是任何對象,故列表中所保存的是對象的指針,對于數(shù)值運算會浪費內(nèi)存和CPU計算時間。而Python標(biāo)準(zhǔn)庫array不支持多維數(shù)值,也不支持?jǐn)?shù)值運算函數(shù),同樣不適合數(shù)值計算。Python擴展模塊NumPy提供數(shù)組和矩陣處理功能(類似于MATLAB),提供了更高效的數(shù)值處理功能。使用NumPy模塊一般遵循如下幾個步驟。(1)安裝NumPy模塊。具體步驟請參見本教程第1章相關(guān)內(nèi)容。(2)使用importnumpy語句導(dǎo)入NumPy模塊。(3)創(chuàng)建數(shù)組。(4)處理數(shù)組創(chuàng)建數(shù)組創(chuàng)建數(shù)組包括如下幾種方式。(1)通過array()函數(shù)把序列對象參數(shù)轉(zhuǎn)換為數(shù)組。(2)通過arange()、linspace()和logspace()函數(shù)創(chuàng)建數(shù)組【例7.7】通過array()函數(shù)創(chuàng)建數(shù)組示例>>>importnumpyasnp>>>a=np.array([1,2,3])#一維數(shù)組>>>b=np.array([[1,2,3],[4,5,6],[7,8,9]])#二維數(shù)組>>>a#輸出:array([1,2,3])>>>barray([[1,2,3],[4,5,6],[7,8,9]])說明:如果傳遞給array對象的參數(shù)是多層嵌套的序列,將創(chuàng)建多維數(shù)組【例7.8】通過arange()、linspace()和logspace()函數(shù)創(chuàng)建數(shù)組示例>>>a=np.arange(0,10,2)>>>a#輸出:array([0,2,4,6,8])>>>b=np.linspace(0,2*np.pi,10)>>>barray([0.,0.6981317,1.3962634,2.0943951,2.7925268,3.4906585,4.1887902,4.88692191,5.58505361,6.28318531])>>>c=np.logspace(0,2,10)>>>carray([1.,1.66810054,2.7825594,4.64158883,7.74263683,12.91549665,21.5443469,35.93813664,59.94842503,100.])說明:(1)arange()函數(shù)通過指定開始值、終值和步長來創(chuàng)建一維數(shù)組。(2)linspace()函數(shù)通過指定開始值、終值和元素個數(shù)來創(chuàng)建一維數(shù)組,可以通過endpoint命名參數(shù)指定是否包括終值,缺省設(shè)置是包括終值。(3)logspace()函數(shù)和linspace()類似,用于創(chuàng)建等比數(shù)列處理數(shù)組數(shù)組元素的存取方法和Python列表的存取方法相同。但是,通過下標(biāo)范圍獲取的是原始數(shù)組的一個視圖,與原始數(shù)組共享同一塊數(shù)據(jù)空間,這與Python的列表切片操作不同。數(shù)組也支持常用的運算符操作,例如+、-、*、/等。NumPy內(nèi)置許多針對數(shù)組的每個元素分別進行操作的函數(shù),這些函數(shù)稱之為universalfunction,一般基于C語言級別實現(xiàn),因此其計算速度非??臁纠?.9】數(shù)組處理示例。其中np.exp2(x)計算2x、np.exp(x)計算ex、np.power(x,2)計算x2>>>importnumpyasnp #導(dǎo)入模塊>>>x=np.linspace(0,10,11);x #x=0~10array([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.])>>>y1=np.exp2(x);y1 #y1=2**xarray([1.000e+00,2.000e+00,4.000e+00,8.000e+00,1.600e+01,3.200e+01,6.400e+01,1.280e+02,2.560e+02,5.120e+02,1.024e+03])>>>y2=np.exp(x);y2 #y2=e**xarray([1.00000000e+00,2.71828183e+00,7.38905610e+00,2.00855369e+01,5.45981500e+01,1.48413159e+02,4.03428793e+02,1.09663316e+03,2.98095799e+03,8.10308393e+03,2.20264658e+04])>>>y3=np.power(x,2);y3 #y3=x**2array([0.,1.,4.,9.,16.,25.,36.,49.,64.,81.,100.])數(shù)組應(yīng)用舉例使用模塊NumPy中的函數(shù)可以實現(xiàn)數(shù)值處理;結(jié)合Matplotlib中的繪圖函數(shù)可以很方便地輸出各種處理結(jié)果【例7.10】數(shù)組應(yīng)用示例(funcfig.py):利用NumPy模塊中的函數(shù)和Matplotlib中的繪圖函數(shù)繪制y=x2和y=2x的圖形importnumpyasnp #導(dǎo)入模塊importmatplotlib.pyplotasplt #導(dǎo)入模塊importmath #導(dǎo)入模塊x=np.linspace(0,10,100) #x軸坐標(biāo)值y1=np.power(x,2) #y1=x**2y2=np.exp2(x) #y2=2**xplt.plot(x,y1,x,y2) #繪制圖形plt.show() #顯示圖形7.4日期和時間處理相關(guān)術(shù)語epoch(新紀(jì)元):系統(tǒng)規(guī)定的時間起始點UTC(CoordinatedUniversalTime):協(xié)調(diào)世界時DST(DaylightSavingTime):夏令時time模塊和時間對象處理time模塊的struct_time對象是一個命名元組,用于表示時間對象,包括9個字段屬性,即tm_year(年)、tm_mon(月)、tm_mday(日)、tm_hour(時)、tm_min(分)、tm_sec(秒)、tm_wday(星期[0,6],0表示星期一)、tm_yday(該年第幾天[1,366])、tm_isdst(是否夏時令,0否、1是、-1未知)7.4日期和時間處理time模塊主要包含以下時間處理函數(shù)【例7.11】time模塊和時間對象處理示例time模塊程序運行時間測量time模塊還包含如下用于測量程序性能的函數(shù)。process_time():返回當(dāng)前進程處理器運行時間。perf_counter():返回性能計數(shù)器。monotonic():返回單向時鐘【例7.12】測量程序運行時間importtimedeftest():sum=0foriinrange(0,9999999):sum+=ireturnsumif__name__=='__main__':t1=time.monotonic()#單向時鐘

print(test())t2=time.monotonic()#單向時鐘

print('運行時間:',t2-t1)datetime模塊和日期時間對象處理兩個常量:datetime.MINYEAR(1)和datetime.MAXYEAR(9999)datetime模塊包含用于表示日期的date對象、表示時間的time對象和表示日期時間的datetime對象。timedelta對象表示日期或時間之間的差值,可以用于日期或時間的運算通過datetime模塊的date.today()函數(shù)可以返回表示當(dāng)前日期的date對象,通過其實例對象方法,可以獲取其年、月、日等信息通過datetime模塊的datetime.now()函數(shù)可以返回表示當(dāng)前日期時間的datetime對象,通過其實例對象方法,可以獲取其年、月、日、時、分、秒等信息datetime模塊有兩個常量【例7.13】獲取當(dāng)前日期時間示例(datetimes.py)importdatetimed=datetime.date.today()dt=datetime.datetime.now()print("當(dāng)前的日期是%s"%d)print("當(dāng)前的日期和時間是%s"%dt)print("ISO格式的日期和時間是%s"%dt.isoformat())print("當(dāng)前的年份是%s"%dt.year)print("當(dāng)前的月份是%s"%dt.month)print("當(dāng)前的日期是%s"%dt.day)print("dd/mm/yyyy格式是%s/%s/%s"%(dt.day,dt.month,dt.year))print("當(dāng)前小時是%s"%dt.hour)print("當(dāng)前分鐘是%s"%dt.minute)print("當(dāng)前秒是%s"%dt.second)日期時間格式化為字符串time模塊中的strftime()函數(shù)將struct_time對象格式化為字符串【例7.14】日期時間格式化為字符串示例1日期時間字符串解析為日期時間對象time模塊中的strptime()函數(shù)將時間字符串解析為struct_time對象【例7.16】日期時間字符串解析示例1>>>fromtimeimport*>>>strptime("30Nov22","%d%b%y")time.struct_time(tm_year=2022,tm_mon=11,tm_mday=30,tm_hour=0,tm_min=0,tm_sec=0,tm_wday=2,tm_yday=334,tm_isdst=-1)日期時間字符串解析為日期時間對象【例7.17】日期時間字符串解析示例2>>>datetime.datetime.strptime(‘2021-08-18','%Y-%m-%d')datetime.datetime(2021,8,18,0,0)7.5應(yīng)用舉例7.5.1使用阿基米德方法估算圓周率7.5.2使用隨機數(shù)估值圓周率7.5.3程序運行時間測量7.5.1使用阿基米德方法估算圓周率使用阿基米德方法估算圓周率的數(shù)學(xué)方法如下:使用單位圓的內(nèi)接多邊形的周長估算圓的周長通過增加邊的數(shù)量(從而減少邊的長度),內(nèi)接多邊形的周長將越來越接近圓的實際周長假設(shè)半徑為h的圓內(nèi)接正N多邊形,那么圓周長c≈N*s由于B=360/N,故A=180/N,s/2=h*sin(radians(180/N)),因此c≈N*2h*sin(radians(360/N))=2πh,結(jié)果π≈N*sin(radians(360/N))【例7.18】使用阿基米德方法估算圓周率(archimedes.py)importmathdefarchimedes(numSides):halfAngleA=180.0/numSidesarchi_pi=numSides*math.sin(math.radians(halfAngleA))returnarchi_piif__name__=="__main__":forsidesinrange(8,100,8):print(sides,archimedes(sides))7.5.2使用隨機數(shù)估值圓周率【例7.19】使用隨機數(shù)估值圓周率(pi.py)importrandomdefpi(trials):"""通過隨機點位置近似計算圓周率pi"""hits=0#命中圓環(huán)的點的數(shù)量

foriinrange(trials):x=random

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論