版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《Python醫(yī)學(xué)數(shù)據(jù)分析微課版》第四章使用Numpy進(jìn)行矩陣運(yùn)算PythonMedicalDataAnalysisMicro-CourseEdition本章學(xué)習(xí)目標(biāo)01020304了解Numpy庫(kù)的基本概念及其在科學(xué)計(jì)算中的重要性;掌握Numpy數(shù)組對(duì)象的創(chuàng)建方法,包括生成隨機(jī)數(shù)及進(jìn)行基本數(shù)組操作;熟悉Numpy數(shù)組形狀變換的技巧,以及常用計(jì)算和統(tǒng)計(jì)函數(shù)的使用;掌握Numpy矩陣的創(chuàng)建與基本操作方法,理解矩陣運(yùn)算的基本原理;05熟練掌握利用Numpy計(jì)算矩陣相關(guān)系數(shù)、方差、協(xié)方差、標(biāo)準(zhǔn)差等統(tǒng)計(jì)量的方法,并能應(yīng)用于實(shí)際問(wèn)題解決中。本章學(xué)習(xí)目標(biāo)在本章中,我們將深入介紹Numpy這一強(qiáng)大的Python科學(xué)計(jì)算庫(kù),特別聚焦于其在矩陣運(yùn)算中的應(yīng)用。Numpy因其高效處理大型多維數(shù)組及矩陣運(yùn)算的能力,在數(shù)據(jù)分析、機(jī)器學(xué)習(xí)等領(lǐng)域扮演著核心角色。通過(guò)本章的學(xué)習(xí),讀者可以了解Numpy矩陣運(yùn)算方面的知識(shí),同時(shí)可提升解決實(shí)際科學(xué)計(jì)算問(wèn)題的能力。本章內(nèi)容涵蓋Numpy的概述、數(shù)組對(duì)象的創(chuàng)建與操作(如創(chuàng)建數(shù)組,生成隨機(jī)數(shù),數(shù)組基本操作,變換數(shù)組形狀,常用計(jì)算和統(tǒng)計(jì)函數(shù)等)、矩陣的創(chuàng)建及常用操作,包括矩陣的創(chuàng)建方法、基礎(chǔ)操作、以及矩陣的統(tǒng)計(jì)分析(如相關(guān)系數(shù)、方差、協(xié)方差、標(biāo)準(zhǔn)差)等。本章通過(guò)詳細(xì)的講解與示例,幫助讀者逐步構(gòu)建Numpy矩陣運(yùn)算的知識(shí)體系。Numpy概述4.1Numpy數(shù)組對(duì)象4.2內(nèi)容導(dǎo)航CONTENTSNumpy矩陣及常用操作4.34.1Numpy概述Numpy(NumericalPython)是Python中用于科學(xué)計(jì)算的基礎(chǔ)庫(kù)之一,它提供了高性能的多維數(shù)組對(duì)象以及這些數(shù)組上的操作。Numpy的設(shè)計(jì)初衷是為了解決Python在科學(xué)計(jì)算中遇到的性能瓶頸問(wèn)題,特別是處理大型數(shù)組和矩陣運(yùn)算時(shí)具有較高的性能。Numpy通將計(jì)算任務(wù)轉(zhuǎn)化為高效的C語(yǔ)言代碼執(zhí)行,極大地提高了計(jì)算速度和效率。4.1.1為什么要學(xué)習(xí)Numpy
對(duì)于從事數(shù)據(jù)分析、機(jī)器學(xué)習(xí)、科學(xué)計(jì)算等領(lǐng)域的專(zhuān)業(yè)人士和愛(ài)好者來(lái)說(shuō),掌握Numpy是必不可少的。Numpy不僅提供了高效的數(shù)據(jù)處理工具,還通過(guò)其簡(jiǎn)潔的API和強(qiáng)大的功能,使得復(fù)雜的數(shù)學(xué)和科學(xué)計(jì)算任務(wù)變得易于實(shí)現(xiàn)。此外,學(xué)習(xí)Numpy也是進(jìn)一步學(xué)習(xí)其他科學(xué)計(jì)算庫(kù)和框架(如Pandas、TensorFlow、PyTorch等)的重要基礎(chǔ)。4.1.2Numpy的核心優(yōu)勢(shì)高效的數(shù)據(jù)存儲(chǔ)和處理:Numpy數(shù)組(ndarray)是固定大小、同類(lèi)型元素的多維數(shù)組,相比Python原生的列表(list),Numpy數(shù)組在內(nèi)存中的存儲(chǔ)更加緊湊,且能夠利用CPU的緩存進(jìn)行快速的數(shù)據(jù)訪問(wèn)和操作。廣播機(jī)制:Numpy的廣播機(jī)制允許在執(zhí)行數(shù)組運(yùn)算時(shí),對(duì)形狀不同的數(shù)組進(jìn)行自動(dòng)擴(kuò)展,從而避免了顯式的循環(huán)和數(shù)組復(fù)制,極大地簡(jiǎn)化了代碼并提高了效率。豐富的數(shù)學(xué)函數(shù)庫(kù):Numpy提供了大量的數(shù)學(xué)函數(shù),涵蓋了線性代數(shù)、傅里葉變換、隨機(jī)數(shù)生成等多個(gè)領(lǐng)域,使得在Python中進(jìn)行復(fù)雜的數(shù)學(xué)和科學(xué)計(jì)算變得簡(jiǎn)單快捷。與其他科學(xué)計(jì)算庫(kù)的集成:Numpy是許多高級(jí)科學(xué)計(jì)算庫(kù)(如SciPy、Pandas、Matplotlib等)的基礎(chǔ),這些庫(kù)在Numpy的基礎(chǔ)上提供了更加豐富的功能,形成了一個(gè)完整的Python科學(xué)計(jì)算生態(tài)系統(tǒng)。Numpy概述4.1Numpy數(shù)組對(duì)象4.2內(nèi)容導(dǎo)航CONTENTSNumpy矩陣及常用操作4.34.2Numpy數(shù)組對(duì)象在Numpy庫(kù)中,數(shù)組對(duì)象(通常簡(jiǎn)稱為Numpy數(shù)組或ndarray)是其核心數(shù)據(jù)結(jié)構(gòu),它提供了一種高效的方式來(lái)存儲(chǔ)和操作大型多維數(shù)組和矩陣。Numpy數(shù)組相比于Python的內(nèi)置列表(list)來(lái)說(shuō),在性能上有顯著的提升,特別是在進(jìn)行大規(guī)模數(shù)值計(jì)算時(shí)。Numpy庫(kù)處理的最基礎(chǔ)數(shù)據(jù)類(lèi)型是由同種元素構(gòu)成的多維數(shù)組(ndarray),簡(jiǎn)稱“數(shù)組”。數(shù)組中所有元素的類(lèi)型必須相同;數(shù)組中元素可以用整數(shù)索引,序號(hào)從0開(kāi)始;ndarray類(lèi)型的維度(dimensions)叫做軸(axes),軸的個(gè)數(shù)叫做秩(rank),一維數(shù)組的秩為1,二維數(shù)組的秩為2。4.2Numpy數(shù)組對(duì)象在使用Numpy前,應(yīng)該確保已經(jīng)安裝Numpy。若沒(méi)有安裝,可使用pip命令進(jìn)行安裝,具體安裝指令如下。!pipinstallnumpy由于Numpy庫(kù)中函數(shù)較多且命名容易與常用命名混淆,在使用時(shí)建議采用如下方式引用Numpy庫(kù)。importnumpyasnp在使用Numpy庫(kù)中的函數(shù)時(shí),使用np代替numpy。下面將詳細(xì)介紹Numpy數(shù)組對(duì)象的一些關(guān)鍵特性和操作方法。4.2.1創(chuàng)建數(shù)組Numpy提供了多種方式來(lái)創(chuàng)建數(shù)組,可以從現(xiàn)有數(shù)據(jù)(如列表、元組或其他數(shù)組)轉(zhuǎn)換,也可以使用特定函數(shù)直接生成具有特定形狀和類(lèi)型的數(shù)組。Numpy庫(kù)常用創(chuàng)建數(shù)組的函數(shù)見(jiàn)表3-1。函數(shù)功能np.array([x,y,z]),dtype=int)從Python列表和元組創(chuàng)造數(shù)組np.arrage(x,y,i)創(chuàng)建一個(gè)由x到y(tǒng),以i為步長(zhǎng)的數(shù)組np.linspace(x,y,n)創(chuàng)建一個(gè)由x到y(tǒng),等分成n個(gè)元素的數(shù)組np.ones((m,n),dtype)創(chuàng)建一個(gè)m行n列全1數(shù)組,dtype是數(shù)據(jù)類(lèi)型np.zeros((m,n),dtype)創(chuàng)建一個(gè)m行n列全0數(shù)組,dtype是數(shù)據(jù)類(lèi)型表3-1Numpy常用創(chuàng)建數(shù)組函數(shù)importnumpyasnp#引用Numpy庫(kù)arr=np.array([1,2,3,4])#使用列表[1234]創(chuàng)建Numpy數(shù)組arrzeros=np.zeros((3,4))
#創(chuàng)建一個(gè)3行*4列的全零數(shù)組
ones=np.ones((2,3))
#創(chuàng)建一個(gè)2行*3列的全1數(shù)組
arange=np.arange(10)
#創(chuàng)建一個(gè)從0到9有10個(gè)元素的數(shù)組
linspace=np.linspace(0,1,5)
#創(chuàng)建在0到1之間5個(gè)等間距的數(shù)組成的數(shù)組4.2.1創(chuàng)建數(shù)組Numpy數(shù)組具有多種屬性,用于描述數(shù)組的形狀、數(shù)據(jù)類(lèi)型等信息,具體內(nèi)容見(jiàn)表3-2。函數(shù)功能shape返回一個(gè)表示數(shù)組維度的元組dtype返回?cái)?shù)組元素的數(shù)據(jù)類(lèi)型size返回?cái)?shù)組中元素的總數(shù)表3-2Numpy數(shù)組屬性查詢arr=np.array([[1,2],[3,4]])#創(chuàng)建一個(gè)2x2的二維數(shù)組,元素為[1,2]和[3,4]print(arr.shape)#打印數(shù)組的維度,對(duì)于二維數(shù)組,輸出格式為(行數(shù),列數(shù)),這里是(2,2)arr=np.array([1,2.0,3])#創(chuàng)建一個(gè)一維數(shù)組,包含整數(shù)1和浮點(diǎn)數(shù)2.0以及整數(shù)3,#Numpy在創(chuàng)建數(shù)組時(shí)會(huì)嘗試統(tǒng)一數(shù)據(jù)類(lèi)型,這里統(tǒng)一為float64print(arr.dtype)#輸出:float64,因?yàn)镻ython在創(chuàng)建數(shù)組時(shí)會(huì)嘗試統(tǒng)一數(shù)據(jù)類(lèi)型arr=np.array([[1,2],[3,4]])#創(chuàng)建一個(gè)2x2的二維數(shù)組,元素為[1,2]和[3,4]print(arr.size)#打印數(shù)組的元素總數(shù),對(duì)于二維數(shù)組,元素總數(shù)為行數(shù)乘以列數(shù),這里是2*2=44.2.2生成隨機(jī)數(shù)Numpy的random模塊提供了多種生成隨機(jī)數(shù)的函數(shù),這些函數(shù)可以生成具有指定形狀、分布和范圍的隨機(jī)數(shù)數(shù)組。在數(shù)據(jù)分析、模擬實(shí)驗(yàn)和算法測(cè)試時(shí)常會(huì)用到,因此掌握隨機(jī)數(shù)的生成方法尤為重要。表3-3
Numpy常用隨機(jī)函數(shù)函數(shù)功能np.random.rand(m,n)創(chuàng)建一個(gè)形狀為m行n列的數(shù)組,數(shù)組中的值在[0,1)區(qū)間內(nèi)均勻分布np.random.randn(m,n)創(chuàng)建一個(gè)形狀為m行n列的數(shù)組,數(shù)組中的值服從標(biāo)準(zhǔn)正態(tài)分布(均值為0,方差為1)np.random.randint(low,high=None,size=None,dtype=int)創(chuàng)建一個(gè)隨機(jī)整數(shù)數(shù)組,元素取值范圍在[low,high)(不包含high),形狀由size參數(shù)指定np.random.uniform(low=0.0,high=1.0,size=None)生成一個(gè)在給定的半開(kāi)區(qū)間[low,high)內(nèi)均勻分布的隨機(jī)數(shù)的數(shù)組np.random.normal(loc=0.0,scale=1.0,size=None)創(chuàng)建一個(gè)形狀為size的數(shù)組,數(shù)組中的值服從正態(tài)分布,其中l(wèi)oc是均值,scale是標(biāo)準(zhǔn)差np.random.choice(a,size=None,replace=True,p=None)從給定的一維數(shù)組a中隨機(jī)抽取元素,形成一個(gè)新的數(shù)組,size是新數(shù)組的形狀,replace決定是否可以重復(fù)抽取,p是元素被抽取的概率np.random.seed(seed=None)設(shè)置隨機(jī)數(shù)生成器的種子,使得每次運(yùn)行代碼時(shí)生成的隨機(jī)數(shù)序列相同,如果不設(shè)置種子,則每次運(yùn)行生成的隨機(jī)數(shù)序列可能不同4.2.2生成隨機(jī)數(shù)生成一個(gè)給定形狀的數(shù)組,數(shù)組中的元素服從[0,1)區(qū)間的均勻分布。1.生成基礎(chǔ)隨機(jī)數(shù)(1)np.random.rand(m,n)#創(chuàng)建一個(gè)形狀為3行2列的數(shù)組,數(shù)組中的值在[0,1)區(qū)間內(nèi)均勻分布
rand_array=np.random.rand(3,2)(2)np.random.rand(m,n)生成一個(gè)給定形狀的數(shù)組,數(shù)組中的元素服從標(biāo)準(zhǔn)正態(tài)分布(均值為0,標(biāo)準(zhǔn)差為1)。#創(chuàng)建一個(gè)形狀為3行2列的數(shù)組,數(shù)組中的值服從標(biāo)準(zhǔn)正態(tài)分布(均值為0,方差為1)randn_array=np.random.randn(3,2)4.2.2生成隨機(jī)數(shù)生成一個(gè)整數(shù)數(shù)組,數(shù)組中的元素在[low,high)區(qū)間內(nèi)均勻隨機(jī)抽樣。如果high為None(且low是整數(shù)),則函數(shù)返回[0,low)之間的隨機(jī)整數(shù)。2.生成指定范圍的隨機(jī)數(shù)(1)np.random.randint(low,high=None,size=None,dtype='l')#創(chuàng)建一個(gè)隨機(jī)整數(shù)數(shù)組,元素取值范圍在[5,10)(不包含10),形狀為(3,4)randint_array=np.random.randint(5,10,size=(3,4))(2)np.random.uniform(low=0.0,high=1.0,size=None)生成一個(gè)在給定的半開(kāi)區(qū)間[low,high)內(nèi)均勻分布的隨機(jī)數(shù)的數(shù)組。#生成一個(gè)在給定的半開(kāi)區(qū)間[1.5,10.0)內(nèi)均勻分布的隨機(jī)數(shù)的數(shù)組,形狀為(2,3)uniform_array=np.random.uniform(low=1.5,high=10.0,size=(2,3))(3)np.random.normal(loc=0.0,scale=1.0,size=None)生成一個(gè)形狀為size的數(shù)組,數(shù)組中的值服從正態(tài)分布,其中l(wèi)oc是均值,scale是標(biāo)準(zhǔn)差。#創(chuàng)建一個(gè)形狀為(2,3)的數(shù)組,數(shù)組中的值服從正態(tài)分布,其中均值為1.5,標(biāo)準(zhǔn)差為2.0normal_array=np.random.normal(loc=1.5,scale=2.0,size=(2,3))4.2.2生成隨機(jī)數(shù)3.隨機(jī)抽樣#從給定的一維數(shù)組[1,2,3,4,5]中隨機(jī)抽取元素,形成一個(gè)新的數(shù)組,形狀為(4,),可以重復(fù)抽取choice_array=np.random.choice(a=[1,2,3,4,5],size=4,replace=True)#從給定的一維數(shù)組[1,2,3,4,5]中隨機(jī)抽取元素,形成一個(gè)新的數(shù)組,形狀為(4,),不可以重復(fù)抽取choice_array_no_replace=np.random.choice(a=[1,2,3,4,5],size=4,replace=False)#從給定的一維數(shù)組[1,2,3,4,5]中隨機(jī)抽取元素,每個(gè)元素被抽取的概率不同#元素1的概率是0.1,元素2的概率是0.2,元素3的概率是0.3,元素4的概率是0.2,元素5的概率是0.2choice_array_with_probs=np.random.choice(a=[1,2,3,4,5],size=4,replace=True,p=[0.1,0.2,0.3,0.2,0.2])np.random.choice(a,size=None,replace=True,p=None):從給定的一維數(shù)組中隨機(jī)抽取元素,構(gòu)建新的數(shù)組??梢灾付ㄊ欠穹呕爻槿。╮eplace),以及每個(gè)元素被抽取的概率(p)。4.2.2生成隨機(jī)數(shù)3.隨機(jī)抽樣#設(shè)置隨機(jī)種子np.random.seed(0)#現(xiàn)在,無(wú)論運(yùn)行多少次,下面的隨機(jī)數(shù)生成結(jié)果都將是相同的print(np.random.rand(3))生成的隨機(jī)數(shù)實(shí)際上是偽隨機(jī)數(shù),它們是通過(guò)算法生成的,但足夠接近于真正的隨機(jī)數(shù),對(duì)于大多數(shù)應(yīng)用場(chǎng)景來(lái)說(shuō)已經(jīng)足夠。為了確??芍貜?fù)性,Numpy允許通過(guò)numpy.random.seed(seed)函數(shù)設(shè)置一個(gè)隨機(jī)種子。一旦設(shè)置了隨機(jī)種子,每次使用相同的種子調(diào)用隨機(jī)數(shù)生成函數(shù)時(shí),都會(huì)得到相同的隨機(jī)數(shù)序列。這對(duì)于調(diào)試和測(cè)試非常有用。Numpy數(shù)組支持多種基本操作,包括算術(shù)運(yùn)算、索引、切片、轉(zhuǎn)置等,具體內(nèi)容見(jiàn)表3-4所示。操作功能array1+array2對(duì)兩個(gè)數(shù)組進(jìn)行對(duì)應(yīng)元素的加法運(yùn)算array1-array2對(duì)兩個(gè)數(shù)組進(jìn)行對(duì)應(yīng)元素的減法運(yùn)算array1*array2對(duì)兩個(gè)數(shù)組進(jìn)行對(duì)應(yīng)元素的乘法運(yùn)算array1/array2對(duì)兩個(gè)數(shù)組進(jìn)行對(duì)應(yīng)元素的除法運(yùn)算array1**array2對(duì)兩個(gè)數(shù)組進(jìn)行對(duì)應(yīng)元素的冪運(yùn)算array[index]通過(guò)索引訪問(wèn)數(shù)組中的單個(gè)元素或子數(shù)組,index可以是整數(shù)或切片對(duì)象array[start:stop:step]通過(guò)切片訪問(wèn)數(shù)組中的一部分元素,start是起始索引,stop是結(jié)束索引(不包含),step是步長(zhǎng)array[:,index]訪問(wèn)數(shù)組中的所有行,但僅指定列的索引array[index,:]訪問(wèn)數(shù)組中的所有列,但僅指定行的索引array.T對(duì)數(shù)組進(jìn)行轉(zhuǎn)置,即行列互換np.transpose(array)對(duì)數(shù)組進(jìn)行轉(zhuǎn)置,功能與array.T相同表3-4Numpy常用基本數(shù)組操作4.2.3數(shù)組基本操作4.2.3數(shù)組基本操作1.算術(shù)運(yùn)算Numpy數(shù)組支持逐元素的算術(shù)運(yùn)算,如加、減、乘、除等。2.索引和切片#算術(shù)運(yùn)算a=np.array([1,2,3])b=np.array([4,5,6])print("加法:",a+b)#輸出:[579]print("減法:",a-b)#輸出:[-3-3-3]print("乘法:",a*b)#輸出:[41018]print("除法:",a/b)#輸出:[0.250.40.5]print("冪運(yùn)算:",a**2)#輸出:[149]#索引和切片arr=np.array([[1,2,3],[4,5,6]])
print(arr[1,2])
#輸出2行3列元素:6
print(arr[:,1])
#輸出所有行1列元素組成的列表:[25]#轉(zhuǎn)置arr=np.array([[1,2],[3,4]])
print(arr.T)
#將數(shù)組arr轉(zhuǎn)置,轉(zhuǎn)置后的輸出數(shù)組為:[[13][24]]3.轉(zhuǎn)置使用.T屬性或np.transpose()函數(shù)可以轉(zhuǎn)置多維數(shù)組。Numpy數(shù)組支持一維和多維的索引和切片操作,用來(lái)查找或選擇部分元素。Numpy提供了多種函數(shù)來(lái)變換數(shù)組的形狀,而不會(huì)改變其數(shù)據(jù),表3-5是Numpy常用變換數(shù)組形狀函數(shù)。表3-5Numpy常用變換數(shù)組形狀函數(shù)4.2.4變換數(shù)組形狀函數(shù)功能np.reshape(newshape)返回給定新形狀newshape的數(shù)組副本,不改變?cè)紨?shù)組數(shù)據(jù)。新形狀的尺寸必須與原始數(shù)組的總元素?cái)?shù)相匹配。np.ndarray.flatten()返回?cái)?shù)組的一維副本(copy),是原始數(shù)組的一個(gè)深拷貝。np.ravel()返回?cái)?shù)組的一維視圖(view),展開(kāi)成一維數(shù)組,不復(fù)制數(shù)據(jù)。#1.reshape,在不改變數(shù)據(jù)的情況下,返回一個(gè)新數(shù)組,該數(shù)組具有指定的形狀arr=np.array([1,2,3,4,5,6])print(arr.reshape(2,3))#將arr轉(zhuǎn)換為2行3列后輸出:[[123][456]]#2.flatten,將數(shù)組展平為一維數(shù)組arr=np.array([[1,2],[3,4]])#創(chuàng)建一個(gè)2維數(shù)組print(arr.flatten())#返回?cái)?shù)組一維形式,輸出:[1234]#3.ravel,類(lèi)似于flatten,讓多維數(shù)組變成一維數(shù)組,但返回的是數(shù)組的一個(gè)視圖,而不是副本。arr_2d=np.array([[1,2,3],[4,5,6]])#創(chuàng)建一個(gè)2維數(shù)組arr_1d_view=arr_2d.ravel()#返回?cái)?shù)組一維形式,輸出:[123456]Numpy提供了豐富的計(jì)算和統(tǒng)計(jì)函數(shù),這些函數(shù)能夠高效地處理數(shù)組數(shù)據(jù),完成各種復(fù)雜的數(shù)學(xué)和統(tǒng)計(jì)任務(wù)。表3-6是numpy中常用的算術(shù)運(yùn)算函數(shù),表3-7是numpy中常用的元素精度函數(shù),表3-8是numpy中常用的統(tǒng)計(jì)函數(shù)。表3-6算術(shù)運(yùn)算函數(shù)4.2.5常用計(jì)算和統(tǒng)計(jì)函數(shù)函數(shù)功能np.add(a,b)或直接使用+操作符計(jì)算兩個(gè)數(shù)組a和b的對(duì)應(yīng)元素之和np.subtract(a,b)或直接使用-操作符計(jì)算兩個(gè)數(shù)組a和b的對(duì)應(yīng)元素之差np.multiply(a,b)或直接使用*操作符計(jì)算兩個(gè)數(shù)組a和b的對(duì)應(yīng)元素之積np.divide(a,b)或直接使用/操作符計(jì)算兩個(gè)數(shù)組a和b的對(duì)應(yīng)元素之商np.power(a,b)計(jì)算數(shù)組a中每個(gè)元素的b次冪np.mod(a,b)或np.remainder(a,b)計(jì)算數(shù)組a和b的對(duì)應(yīng)元素相除的余數(shù)importnumpyasnp
#加法
a=np.array([1,2,3])
b=np.array([4,5,6])
print(np.add(a,b))
#或直接使用a+b
輸出:[579]
#減法print(np.subtract(a,b))#或直接使用a-b輸出:[-3-3-3]#乘法
print(np.multiply(a,b))
#或直接使用a*b
輸出:[41018]
#除法print(np.divide(a,b))#或直接使用a/b輸出:[0.250.40.5]#乘方
print(np.power(a,2))
#計(jì)算a中每個(gè)元素的平方
輸出:[149]#取余print(np.mod(b,a))
#計(jì)算數(shù)組b和a的對(duì)應(yīng)元素相除的余數(shù)
輸出:[010]算術(shù)運(yùn)算函數(shù)4.2.5常用計(jì)算和統(tǒng)計(jì)函數(shù)表3-7元素精度函數(shù)4.2.5常用計(jì)算和統(tǒng)計(jì)函數(shù)函數(shù)功能np.round(a,decimals=0)將數(shù)組a中的元素四舍五入到指定的小數(shù)位數(shù)(默認(rèn)為0)np.ceil(a)返回?cái)?shù)組a中每個(gè)元素向上取整的結(jié)果,如1.2向上取整為2np.floor(a)返回?cái)?shù)組a中每個(gè)元素向下取整的結(jié)果,如1.9向下取整為1#元素精度函數(shù)#四舍五入a=np.array([1.23,2.34,3.456])print(np.round(a,1))#四舍五入到小數(shù)點(diǎn)后一位輸出:[1.22.33.5]#向上取整print(np.ceil(a))#返回?cái)?shù)組a中每個(gè)元素向上取整的結(jié)果,輸出:[2.3.4.]#向下取整print(np.floor(a))#輸出:[1.2.3.]表3-8統(tǒng)計(jì)函數(shù)4.2.5常用計(jì)算和統(tǒng)計(jì)函數(shù)函數(shù)功能np.sum(a,axis=None)計(jì)算數(shù)組a中所有元素的總和,或者沿指定軸axis計(jì)算np.mean(a,axis=None)計(jì)算數(shù)組a中所有元素的算術(shù)平均值,或者沿指定軸axis計(jì)算np.average(a,weights=None,axis=None)根據(jù)權(quán)重weights計(jì)算數(shù)組a的加權(quán)平均值np.amax(a,axis=None)計(jì)算數(shù)組a的最大值np.nanmax(a,axis=None)計(jì)算數(shù)組a忽略NaN值的最大值np.amin(a,axis=None)計(jì)算數(shù)組a的最小值np.nanmin(a,axis=None)計(jì)算數(shù)組a忽略NaN值的最小值np.median(a,axis=None)計(jì)算數(shù)組a的中位數(shù)np.nanmedian(a,axis=None)計(jì)算數(shù)組a忽略NaN值的中位數(shù)np.std(a,axis=None)計(jì)算數(shù)組a的標(biāo)準(zhǔn)差np.var(a,axis=None)計(jì)算數(shù)組a的方差np.percentile(a,q,axis=None)計(jì)算數(shù)組a的第q百分位數(shù)np.nanpercentile(a,q,axis=None)計(jì)算數(shù)組a忽略NaN值的第q百分位數(shù)np.ptp(a,axis=None)計(jì)算數(shù)組a沿指定軸axis方向上的最大值與最小值的差值#求和a=np.array([[1,2],[3,4]])print(np.sum(a))#計(jì)算所有元素的總和輸出:10print(np.sum(a,axis=0))#沿第一個(gè)軸(列)求和輸出:[46]#平均值print(np.mean(a))#計(jì)算所有元素的平均值輸出:2.5print(np.mean(a,axis=1))#沿第二個(gè)軸(行)計(jì)算平均值輸出:[1.53.5]#最大值與最小值print(np.amax(a))#最大值輸出:4print(np.nanmax(np.array([1,np.nan,3])))#忽略NaN的最大值輸出:3.0#中位數(shù)print(np.median(a))#輸出:2.5print(np.nanmedian(np.array([1,np.nan,3])))#忽略NaN的中位數(shù)輸出:2.0#標(biāo)準(zhǔn)差與方差print(np.std(a))#標(biāo)準(zhǔn)差輸出:1.118033988749895print(np.var(a))#方差輸出:1.25#百分位數(shù)print(np.percentile(a,50))#50%百分位數(shù)(即中位數(shù))輸出:2.5print(np.nanpercentile(np.array([1,np.nan,3]),50))#忽略NaN的50%百分位數(shù)輸出:2.0#極差值print(np.ptp(a))#最大值與最小值的差值輸出:34.2.5常用計(jì)算和統(tǒng)計(jì)函數(shù)統(tǒng)計(jì)函數(shù)Numpy概述4.1Numpy數(shù)組對(duì)象4.2內(nèi)容導(dǎo)航CONTENTSNumpy矩陣及常用操作4.3A=np.array([[1,2,3],[4,5,6],[7,8,9]])#使用numpy.array創(chuàng)建矩陣
4.3.1創(chuàng)建矩陣在numpy中,矩陣通常通過(guò)二維數(shù)組來(lái)表示,可以使用numpy.array()函數(shù)來(lái)創(chuàng)建矩陣,代碼如下。[[123][456][789]]C=A+A#矩陣加法D=A-A#矩陣減法E=A*2#矩陣乘法(點(diǎn)乘)F=np.dot(A,A.T)#A與A的轉(zhuǎn)置相乘;矩陣乘法(矩陣之間)4.3.2矩陣基本操作矩陣的基本操作包括加法、減法、乘法(點(diǎn)乘和矩陣乘法)等,代碼如下。對(duì)于矩陣的統(tǒng)計(jì)量計(jì)算,通常我們會(huì)將矩陣視為數(shù)據(jù)集的集合,其中每一行或列代表一個(gè)觀測(cè)或變量。表3-9Numpy計(jì)算矩陣相關(guān)系數(shù)、方差、協(xié)方差、標(biāo)準(zhǔn)差操作4.3.3計(jì)算矩陣的相關(guān)系數(shù)、方差、協(xié)方差、標(biāo)準(zhǔn)差函數(shù)功能np.var(arr,axis=None,dtype=None,out=None,ddof=0)計(jì)算數(shù)組arr沿指定軸的方差。axis:指定沿哪個(gè)軸計(jì)算方差,默認(rèn)為None(計(jì)算整個(gè)數(shù)組)dtype:指定返回值的類(lèi)型;out:指定存儲(chǔ)結(jié)果的數(shù)組ddof:自由度調(diào)整,默認(rèn)為0(樣本方差),為1時(shí)計(jì)算總體方差np.cov(x,y=None,rowvar=True,bias=True,ddof=None,fweights=None,aweights=None)計(jì)算數(shù)組之間的協(xié)方差矩陣。x:輸入數(shù)組,二維,每行是一個(gè)變量,每列是一個(gè)觀測(cè)值;y:第二個(gè)輸入數(shù)組,與m形狀相同(可選)。rowvar:布爾值,指定每行(True)或每列(False)是否被視為變量,默認(rèn)為T(mén)rue。;bias:布爾值,指定是否計(jì)算有偏協(xié)方差(True)或無(wú)偏協(xié)方差(False),默認(rèn)為T(mén)rue。ddof:整數(shù),指定自由度調(diào)整,僅在bias=False時(shí)有效,默認(rèn)為None時(shí)與bias參數(shù)保持一致。fweights:數(shù)組,指定頻率權(quán)重(可選)。aweights:數(shù)組,指定絕對(duì)權(quán)重(可選)。np.std(a,axis=None,dtype=None,out=None,ddof=0)計(jì)算輸入數(shù)組a沿指定軸的標(biāo)準(zhǔn)差。axis、dtype、out、ddof參數(shù)與numpy.var()函數(shù)相同,分別指定沿哪個(gè)軸計(jì)算標(biāo)準(zhǔn)差、返回?cái)?shù)組的類(lèi)型、存儲(chǔ)結(jié)果的數(shù)組以及自由度調(diào)整。np.corrcoef(x,y=None,rowvar=True)計(jì)算輸入變量之間的相關(guān)系數(shù)矩陣。x、y、rowvar參數(shù)與np.cov()函數(shù)相同。注意,numpy.corrcoef()不接受dtype、out、ddof、fweights和aweights參數(shù)。#生成矩陣data=np.array([[1,2,3],[4,5,6],[7,8,9]])#計(jì)算協(xié)方差矩陣cov_matrix=np.cov(data,rowvar=False)#計(jì)算標(biāo)準(zhǔn)差(針對(duì)每列)std_dev=np.std(data,axis=0)#計(jì)算方差(針對(duì)每列)var_data=np.var(data,axis=0)#計(jì)算相關(guān)系數(shù)矩陣(注意:這里的數(shù)據(jù)可能不是最佳的示例,因?yàn)樗鼈兪蔷€性的)corr_matrix=np.corrcoef(data,rowvar=False)4.3.3計(jì)算矩陣的相關(guān)系數(shù)、方差、協(xié)方差、標(biāo)準(zhǔn)差相關(guān)系數(shù)通常用于計(jì)算兩個(gè)變量之間的線性相關(guān)程度,numpy本身不直接提供計(jì)算矩陣中所有變量間相關(guān)系數(shù)的方法,但可以使用np.corrcoef()來(lái)計(jì)算。方差、協(xié)方差、標(biāo)準(zhǔn)差可以通過(guò)np.var()、np.cov()和numpy.std()來(lái)計(jì)算。在調(diào)用np.cov()和np.corrcoef()時(shí),rowvar參數(shù)控制每一行(rowvar=True)或每一列(rowvar=False)是否被視為變量。在大多數(shù)數(shù)據(jù)分析場(chǎng)景中,我們假設(shè)每一列代表一個(gè)變量,因此rowvar=False是常用的設(shè)置。協(xié)方差矩陣[[9.9.9.][9.9.9.][9.9.9.]]標(biāo)準(zhǔn)差(每列)[2.449489742.449489742.44948974]方差(每列)[6.6.6.]相關(guān)系數(shù)矩陣[[1.1.1.][1.1.1.][1.1.1.]]結(jié)果實(shí)訓(xùn)3Numpy數(shù)據(jù)操作案例案例:表3-10為醫(yī)院患者的病歷數(shù)據(jù),包含患者編號(hào)、患者年齡、收縮壓以及舒張壓。請(qǐng)完成以下計(jì)算:1.計(jì)算患者平均收縮壓和舒張壓;2.根據(jù)一般醫(yī)學(xué)標(biāo)準(zhǔn),收縮壓≥140mmHg或舒張壓≥90mmHg可視為高血壓,請(qǐng)識(shí)別出高血壓患者;3.現(xiàn)將血壓數(shù)據(jù)分為不同的類(lèi)別并假設(shè):正常血壓<120/80,輕度高血壓120-139/80-89,中度高血壓140-179/90-109,重度高血壓>=180/110,請(qǐng)統(tǒng)計(jì)每個(gè)類(lèi)別的患者數(shù)量;4.計(jì)算每個(gè)患者血壓變化(比如,與平均血壓的差異)的標(biāo)準(zhǔn)差,以了解患者之間血壓波動(dòng)的程度。實(shí)訓(xùn)3Numpy數(shù)據(jù)操作案例患者編號(hào)患者年齡收縮壓舒張壓1451208025514090338115754621358552512966625144907681256582215395表3-10醫(yī)院患者病歷數(shù)據(jù)解題思路1.創(chuàng)建一個(gè)Numpy數(shù)組來(lái)模擬患者的年齡以及血壓數(shù)據(jù);2.使用np.mean()函數(shù)進(jìn)行收縮壓、舒張壓均值計(jì)算;3.對(duì)患者收縮壓及舒張壓的值進(jìn)行判斷,按照收縮壓≥140mmHg或舒張壓≥90mmHg標(biāo)準(zhǔn),識(shí)別高血壓患者;4.按照血壓值進(jìn)行分組,并使用np.unique()函數(shù)去重后進(jìn)行統(tǒng)計(jì);5.計(jì)算患者血壓與平均血壓的差值,并使用np.std()函數(shù)計(jì)算血壓變化的標(biāo)準(zhǔn)差。實(shí)訓(xùn)3Numpy數(shù)據(jù)操作案例importnumpyasnp
#創(chuàng)建數(shù)組,模擬數(shù)據(jù)
#列定義:['patient_id','age','systolic_bp','diastolic_bp']blood_pressure_data=np.array([[1,45,120,80],#患者1,年齡45,收縮壓120,舒張壓80[2,55,140,90],#患者2,年齡55,收縮壓140,舒張壓90[3,38,115,75],#患者3,年齡38,收縮壓115,舒張壓75[4,62,135,85],#患者4,年齡62,收縮壓135,舒張壓85[5,25,129,66],#患者5,年齡15,收縮壓129,舒張壓66[6,25,144,90],#患者6,年齡25,收縮壓144,舒張壓90[7,68,125,65],#患者7,年齡68,收縮壓125,舒張壓65[8,22,153,95],#患者8,年齡22,收縮壓153,舒張壓95])創(chuàng)建數(shù)組,模擬數(shù)據(jù)
實(shí)訓(xùn)3Numpy數(shù)據(jù)操作案例average_systolic_bp=np.mean(blood_pressure_data[:,2])average_diastolic_bp=np.mean(blood_pressure_data[:,3])print(f"平均收縮壓為:{average_systolic_bp}")print(f"平均舒張壓為:{average_diastolic_bp}")1.計(jì)算平均收縮壓和舒張壓平均收縮壓為:132.625平均舒張壓為:80.75代碼運(yùn)行結(jié)果實(shí)訓(xùn)3Numpy數(shù)據(jù)操作案例#根據(jù)一般醫(yī)學(xué)標(biāo)準(zhǔn),收縮壓≥140mmHg或舒張壓≥90mmHg可視為高血壓hypertensive_patients=blood_pressure_data[(blood_pressure_data[:,2]>=140)|(blood_pressure_data[:,3]>=90)]print("高血壓患者信息:")print(hypertensive_patients)#輸出高血壓患者信息2.識(shí)別高血壓患者高血壓患者信息:[[25514090][62514490][82215395]]代碼運(yùn)行結(jié)果實(shí)訓(xùn)3Numpy數(shù)據(jù)操作案例#定義血壓分類(lèi)標(biāo)準(zhǔn)#假設(shè):正常<120/80,輕度高血壓120-139/80-89,中度高血壓140-179/90-109,重度高血壓>=180/110categories=[]forbpinblood_
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年邊防技能考試題庫(kù)及答案
- 車(chē)間計(jì)件工資制度方案
- 2025年核電用閥門(mén)閘閥技術(shù)十年發(fā)展報(bào)告
- 數(shù)字貿(mào)易新業(yè)態(tài)下跨境服務(wù)平臺(tái)開(kāi)發(fā)與跨境電商法規(guī)可行性研究
- 2026年有機(jī)肥料智能應(yīng)用技術(shù)革新報(bào)告
- 高中道德與法治教育中的法治教育對(duì)學(xué)生法律意識(shí)培養(yǎng)的實(shí)證研究教學(xué)研究課題報(bào)告
- 信訪回訪制度
- 嬰幼兒感冒護(hù)理技巧
- 云上智農(nóng)應(yīng)用培訓(xùn)課件
- 中國(guó)雙休制度
- 天津市-2024年-社區(qū)工作者-上半年筆試真題卷
- GB/T 4074.1-2024繞組線試驗(yàn)方法第1部分:一般規(guī)定
- 復(fù)方蒲公英注射液抗腫瘤作用研究
- 物資、百貨、五金采購(gòu) 投標(biāo)方案(技術(shù)方案)
- 菌種鑒定報(bào)告文檔
- 成都市水功能區(qū)名錄表
- Jira工具操作手冊(cè)
- DL/T 5097-2014 火力發(fā)電廠貯灰場(chǎng)巖土工程勘測(cè)技術(shù)規(guī)程
- 能源費(fèi)用托管型合同能源管理項(xiàng)目
- 山西焦煤集團(tuán)正仁煤業(yè)有限公司礦產(chǎn)資源開(kāi)發(fā)利用、地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 新生兒疾病診療規(guī)范診療指南診療常規(guī)2022版
評(píng)論
0/150
提交評(píng)論