Python數(shù)據(jù)分析基礎(chǔ)教程(微課版)(第2版)課件 第4章NumPy 數(shù)組與矢量計(jì)算_第1頁(yè)
Python數(shù)據(jù)分析基礎(chǔ)教程(微課版)(第2版)課件 第4章NumPy 數(shù)組與矢量計(jì)算_第2頁(yè)
Python數(shù)據(jù)分析基礎(chǔ)教程(微課版)(第2版)課件 第4章NumPy 數(shù)組與矢量計(jì)算_第3頁(yè)
Python數(shù)據(jù)分析基礎(chǔ)教程(微課版)(第2版)課件 第4章NumPy 數(shù)組與矢量計(jì)算_第4頁(yè)
Python數(shù)據(jù)分析基礎(chǔ)教程(微課版)(第2版)課件 第4章NumPy 數(shù)組與矢量計(jì)算_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Python數(shù)據(jù)分析基礎(chǔ)教程(第2版)

第4章NumPy數(shù)組與矢量計(jì)算學(xué)習(xí)目標(biāo)

了解NumPy和SciPy作用與安裝。

掌握創(chuàng)建數(shù)組對(duì)象方法。

掌握數(shù)組的索引、切片和其他操作。

掌握數(shù)組的運(yùn)算和通用函數(shù)使用。

掌握NumPy矩陣創(chuàng)建、計(jì)算和操作。

掌握隨機(jī)數(shù)生成的方法。123NumPy概述NumPy數(shù)組對(duì)象NumPy數(shù)組操作NumPy數(shù)組的矢量計(jì)算4目錄CONTENNumPy矩陣創(chuàng)建、計(jì)算及操作567項(xiàng)目實(shí)踐本章小結(jié)8隨機(jī)數(shù)的生成NumPy是一個(gè)開(kāi)源的Python科學(xué)計(jì)算庫(kù),它是一個(gè)由多維數(shù)組和用于處理數(shù)組的例程集合組成的庫(kù)。

1.NumPy的基本功能如下。(1)提供了一個(gè)具有矢量算術(shù)運(yùn)算和復(fù)雜廣播功能的、快速且節(jié)省空間的多維數(shù)組對(duì)象ndarray。(2)提供了用于對(duì)數(shù)組執(zhí)行元素級(jí)計(jì)算以及直接對(duì)數(shù)組執(zhí)行數(shù)學(xué)運(yùn)算的函數(shù)。(3)提供了用于讀寫(xiě)硬盤(pán)上基于數(shù)組的數(shù)據(jù)集的工具,以及用于操作內(nèi)存映射文件的工具。(4)提供了線(xiàn)性代數(shù)運(yùn)算、隨機(jī)數(shù)生成以及傅里葉變換功能。(5)提供了用于集成由C、C++、Fortran等語(yǔ)言編寫(xiě)的代碼的工具。(6)在數(shù)據(jù)分析方面,NumPy還可作為算法之間傳遞數(shù)據(jù)的容器。4.1.1NumPy簡(jiǎn)介2.在Python中使用NumPy的優(yōu)勢(shì)

(1)在進(jìn)行數(shù)值計(jì)算時(shí),使用NumPy能夠直接對(duì)數(shù)組和矩陣進(jìn)行操作,因此可以省略許多處理數(shù)值計(jì)算的循環(huán)語(yǔ)句。同時(shí),由于NumPy擁有眾多的數(shù)學(xué)函數(shù),因此會(huì)讓編寫(xiě)代碼的工作輕松許多。此外,NumPy的底層算法在設(shè)計(jì)時(shí)就有著優(yōu)異的性能,并且經(jīng)受住了時(shí)間的考驗(yàn)。

(2)NumPy中數(shù)組的存儲(chǔ)效率和輸入輸出性能均遠(yuǎn)遠(yuǎn)優(yōu)于Python中等價(jià)的基本數(shù)據(jù)結(jié)構(gòu)(如嵌套的列表),其能夠提升的性能與數(shù)組中元素的數(shù)目成比例。對(duì)于大型數(shù)組的運(yùn)算,使用NumPy有很大的優(yōu)勢(shì)。對(duì)于TB級(jí)的大文件,NumPy使用內(nèi)存映射文件來(lái)處理,以達(dá)到最優(yōu)的數(shù)據(jù)讀寫(xiě)性能。不過(guò),NumPy數(shù)組的通用性不及Python提供的列表,因此在科學(xué)計(jì)算之外的領(lǐng)域,NumPy的優(yōu)勢(shì)就不那么明顯了。4.1.1NumPy簡(jiǎn)介2.在Python中使用NumPy的優(yōu)勢(shì)

(3)NumPy的大部分代碼都是用C語(yǔ)言編寫(xiě)的,這使得NumPy代碼比純Python代碼高效得多。NumPy同樣支持C語(yǔ)言的API,并且允許在C語(yǔ)言源代碼上做更多的功能拓展。

(4)NumPy通常與SciPy和Matplotlib一起使用,這種組合廣泛用于替代MATLAB。

(5)NumPy是開(kāi)源的庫(kù)。4.1.1NumPy簡(jiǎn)介1.測(cè)試Python環(huán)境中是否安裝了NumPy

在Windows操作系統(tǒng)下,按【W(wǎng)indows】+【R】鍵,打開(kāi)“運(yùn)行”對(duì)話(huà)框,在打開(kāi)欄中輸入python,按【Enter】鍵,進(jìn)入Python交互式終端。在Python命令提示符>>>后輸入fromnumpyimport*命令,如果在交互式終端中出現(xiàn)ModuleNotFoundError:Nomodulenamed‘numpy’的錯(cuò)誤提示,則需要安裝NumPy。在Windows操作系統(tǒng)下安裝NumPy方法(自主學(xué)習(xí))PyCharm安裝NumPy方法(自主學(xué)習(xí))NumPy的導(dǎo)入方法:impornumpyasnp或者fromnumpyimport*

4.1.2NumPy安裝與測(cè)試

SciPy是世界著名的Python開(kāi)源科學(xué)計(jì)算庫(kù),它是建立在NumPy基礎(chǔ)之上,增加了眾多的數(shù)學(xué)、科學(xué)以及工程計(jì)算中常用的庫(kù)函數(shù)。它增加的功能包括插值、積分、最優(yōu)化、統(tǒng)計(jì)、線(xiàn)性代數(shù)、傅里葉變換、圖像處理和常微分方程求解器等一些專(zhuān)用函數(shù)。

與NumPy庫(kù)相同,SciPy也是需要單獨(dú)安裝,安裝步驟如下。1.測(cè)試Python環(huán)境中是否安裝了SciPy(自主學(xué)習(xí))2.在Windows操作系統(tǒng)下安裝SciPy(自主學(xué)習(xí))3.

PyCharm安裝SciPy(自主學(xué)習(xí))4.SciPy的導(dǎo)入方法:importscipyassp或者fromscipyimport*4.1.3SciPy簡(jiǎn)介及其安裝與測(cè)試

在科學(xué)計(jì)算中,常常會(huì)遇到數(shù)組和矩陣的計(jì)算,如有兩個(gè)一維數(shù)組x和y,其中,x的值為0-10的整數(shù),y的值為0-10的整數(shù)的平方,需要計(jì)算x與y的一維數(shù)組相加。1.利用Python的循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)兩個(gè)一維數(shù)組相加示例代碼example4-12.利用NumPy實(shí)現(xiàn)兩個(gè)一維數(shù)組相加的示例代碼example4-23.比較兩種方法的計(jì)算速度測(cè)試示例代碼4.1.4NumPy的簡(jiǎn)單應(yīng)用:一維數(shù)組相加

NumPy提供了兩種基本對(duì)象:ndarray(N-dimensionalArrayObject)和ufunc(UniversalFunctionObject)。其中ndarray是一個(gè)多維數(shù)組對(duì)象,而ufunc則是能夠?qū)?shù)組進(jìn)行處理的函數(shù)。NumPy數(shù)組一般是同質(zhì)的(但特殊的數(shù)組類(lèi)型可以是異質(zhì)的),即數(shù)組中所有元素的數(shù)據(jù)類(lèi)型必須一致。NumPy數(shù)組的下標(biāo)也是從0開(kāi)始的。數(shù)組元素的數(shù)據(jù)類(lèi)型用數(shù)據(jù)類(lèi)型對(duì)象表示,數(shù)據(jù)類(lèi)型對(duì)象是dtype類(lèi)的實(shí)例。4.2.1創(chuàng)建數(shù)組

利用NumPy提供的array()函數(shù)可以創(chuàng)建一維或多維數(shù)組,其基本語(yǔ)法格式如下。numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0)

該函數(shù)中的部分參數(shù)說(shuō)明如下。object:array類(lèi)型,表示想要?jiǎng)?chuàng)建數(shù)組,無(wú)默認(rèn)。dtype:string類(lèi)型,表示數(shù)組所需要的數(shù)據(jù)類(lèi)型,如果未給定,則選擇保存對(duì)象所需的最小的數(shù)據(jù)類(lèi)型,默認(rèn)值為None。ndmin:int類(lèi)型,指定生成數(shù)組應(yīng)該具有的最小維數(shù),默認(rèn)值為None。

在創(chuàng)建數(shù)組時(shí),object是唯一必要的參數(shù),其余參數(shù)均為默認(rèn)的可選參數(shù)。4.2.1創(chuàng)建數(shù)組創(chuàng)建數(shù)組后,選取數(shù)組中的某個(gè)特定元素的方法如下。

數(shù)組名[m,n]

其中m和n為數(shù)組元素下標(biāo)。注意,數(shù)組的下標(biāo)是從0開(kāi)始。

例如在example4-3示例中,創(chuàng)建了一個(gè)二維數(shù)組arr2,arr2數(shù)組元素及與其對(duì)應(yīng)的位置如表4-1、表4-2所示。4.2.2選取數(shù)組元素

在對(duì)數(shù)組的操作中,常常需要了解數(shù)組的特性,如數(shù)組的維度、數(shù)據(jù)類(lèi)型和數(shù)組中元素的個(gè)數(shù)等。而要了解數(shù)組的特性,首先需要了解數(shù)組的屬性。數(shù)組的屬性及說(shuō)明如表4-3所示。4.2.3數(shù)組的屬性

說(shuō)明:數(shù)組的shape屬性不僅能顯示數(shù)組的行數(shù)或列數(shù),而且還可以調(diào)整數(shù)組的行和列的大小。1.使用arange()函數(shù)創(chuàng)建一維數(shù)組2.使用linspace()函數(shù)創(chuàng)建數(shù)組3.使用logspace()函數(shù)創(chuàng)建等比數(shù)列4.使用zeros()、eye()、identity()、diag()和ones()函數(shù)創(chuàng)建特殊數(shù)組5.使用asarray()函數(shù)創(chuàng)建數(shù)組6.使用empty()函數(shù)創(chuàng)建數(shù)組具體示例見(jiàn)教材。4.2.4創(chuàng)建數(shù)組的其他方法Python支持的數(shù)據(jù)類(lèi)型有整型、浮點(diǎn)型以及復(fù)數(shù)型,但這些類(lèi)型不足以滿(mǎn)足科學(xué)計(jì)算的需求,因此NumPy添加了很多其他的數(shù)據(jù)類(lèi)型。在實(shí)際應(yīng)用中,為了提高計(jì)算結(jié)果的準(zhǔn)確度,需要使用不同精度的數(shù)據(jù)類(lèi)型,并且不同的數(shù)據(jù)類(lèi)型所占用的內(nèi)存空間也是不同的。在NumPy中,大部分?jǐn)?shù)據(jù)類(lèi)型名是以數(shù)字結(jié)尾的,這個(gè)數(shù)字表示其在內(nèi)存中占用的位數(shù)。

1.NumPy中支持的數(shù)據(jù)類(lèi)型

見(jiàn)表4-4NumPy的基本數(shù)據(jù)類(lèi)型及描述4.2.5Numpy的數(shù)據(jù)類(lèi)型2.?dāng)?shù)組的數(shù)據(jù)類(lèi)型轉(zhuǎn)換數(shù)組有一個(gè)dtype屬性,通過(guò)該屬性可以查看數(shù)組的數(shù)據(jù)類(lèi)型,方法是數(shù)組名.dtype。而數(shù)組的數(shù)據(jù)類(lèi)型在創(chuàng)建數(shù)組時(shí)就已經(jīng)通過(guò)dtype參數(shù)確定了,如果想實(shí)現(xiàn)數(shù)組中數(shù)值類(lèi)型的轉(zhuǎn)換可采用astype()函數(shù)。astype()函數(shù)的格式如下。數(shù)組名.astype(numpy.數(shù)據(jù)類(lèi)型)4.2.5Numpy的數(shù)據(jù)類(lèi)型3.自定義數(shù)據(jù)類(lèi)型

自定義數(shù)據(jù)類(lèi)型是一種異構(gòu)數(shù)據(jù)類(lèi)型,可以將它看作是電子表格的標(biāo)題行的數(shù)據(jù)。例如,創(chuàng)建一個(gè)存儲(chǔ)產(chǎn)品價(jià)格信息的數(shù)據(jù)類(lèi)型。其中,產(chǎn)品名稱(chēng)是用字符串表示的長(zhǎng)度為50個(gè)字符,產(chǎn)品價(jià)格是用32位單精度浮點(diǎn)數(shù)表示。那么,使用自定義數(shù)據(jù)類(lèi)型來(lái)創(chuàng)建數(shù)組的方法如下。

(1)使用dtype創(chuàng)建自定義數(shù)據(jù)類(lèi)型

(2)

查看數(shù)據(jù)類(lèi)型,可直接查看或使用numpy.dtype()函數(shù)查看

(3)使用array()函數(shù)創(chuàng)建數(shù)組時(shí),使用dtype指定數(shù)組的數(shù)據(jù)類(lèi)型為pro_type(自定義數(shù)據(jù)類(lèi)型)具體示例見(jiàn)教材4.2.5Numpy的數(shù)據(jù)類(lèi)型1.一維數(shù)組的索引與切片

一維數(shù)組的操作類(lèi)似于Python中列表(list)類(lèi)型的操作。如:

一維數(shù)組arr=[a0,a1,a2,a3,a4……,an]

數(shù)組索引01234n(1)利用數(shù)組索引獲取指定元素

獲取數(shù)組中指定元素的方法如下。

數(shù)組名[索引]

例如,獲取數(shù)組arr中第4個(gè)元素a3用arr[3]即可。4.3.1數(shù)組的索引和切片一維數(shù)組的索引與切片(2)數(shù)組的切片

截取數(shù)組中某個(gè)范圍之間元素的方法如下。

數(shù)組名[start:end:step]

其中,start表示截取數(shù)組中開(kāi)始元素的索引,end表示截取數(shù)組中結(jié)束元素的索引,但是不包括end索引所指定的元素,step表示步長(zhǎng)。

例如,截取arr數(shù)組中第2個(gè)元素至第5個(gè)元素,包括第5個(gè)元素,則使用arr[1:5]。4.3.1數(shù)組的索引和切片2.二維數(shù)組的索引與切片

二維數(shù)組是由行和列組成,二維數(shù)組中的每一行相當(dāng)于一維數(shù)組。二維數(shù)組中元素的索引是由該元素所在的行下標(biāo)和列下標(biāo)組成,即由元素的行索引和列索引組成。

如arr是二維數(shù)組,該二維數(shù)組元素用arr[行索引,列索引]表示,該二維數(shù)組中元素與索引的對(duì)應(yīng)關(guān)系如下。4.3.1數(shù)組的索引和切片(1)利用二維數(shù)組的行索引和列索引獲取指定元素

方法:

數(shù)組名[行索引,列索引]

例如,獲取二維數(shù)組中第2行第2列的元素,用arr[1,1]即可。(2)二維數(shù)組的切片

截取二維數(shù)組中某個(gè)區(qū)域之間元素的方法:

數(shù)組名[rows_start:rows_end:rows_step,cols_start:cols_end:cols_step]

其中:rows_start:rows_end表示截取數(shù)組中元素的行索引范圍,

cols_start:cols_end表示截取數(shù)組中元素的列索引范圍,但不包括rows_end行索引和cols_end列索引所指定的元素,rows_step表示行索引的步長(zhǎng),cols_step表示列索引的步長(zhǎng)。4.3.1數(shù)組的索引和切片

示例代碼example4-5.py見(jiàn)教材3.整數(shù)索引

整數(shù)索引就是從兩個(gè)序列的對(duì)應(yīng)位置取出兩個(gè)整數(shù)來(lái)組成行下標(biāo)和列下標(biāo)。

示例代碼example4-6.py見(jiàn)教材。4.布爾值索引

當(dāng)結(jié)果對(duì)象是布爾運(yùn)算(例如比較運(yùn)算符)的結(jié)果時(shí),將使用布爾值索引。

示例代碼example4-7.py見(jiàn)教材。4.3.1數(shù)組的索引和切片數(shù)組的形狀取決于其每個(gè)軸上的元素個(gè)數(shù),也就是數(shù)組的維度。在數(shù)組的操作中,常常要修改數(shù)組的形狀。在NumPy中,修改數(shù)組的形狀時(shí)可直接用一個(gè)正整數(shù)元組來(lái)設(shè)置數(shù)組的維度,或者用reshape()函數(shù)和resize()函數(shù)來(lái)設(shè)置數(shù)組的維度。

1.用正整數(shù)元組修改數(shù)組形狀

用正整數(shù)元組修改數(shù)組形狀的方法如下。

數(shù)組名.shape=(x0,x1,x2…,xn)

參數(shù)x0,..,xn表示數(shù)組中每個(gè)維度上的大小,例如arr.shape=(3,4)表示將arr數(shù)組修改成3行4列數(shù)組,利用該方法會(huì)改變?cè)瓟?shù)組arr的形狀。

4.3.2修改數(shù)組形狀2.用reshape()函數(shù)修改數(shù)組形狀

用reshape()函數(shù)是修改數(shù)組形狀較常用的方法。reshape()函數(shù)的參數(shù)為一個(gè)正整數(shù)元組,分別指定數(shù)組在每個(gè)維度上的大小。用reshape()函數(shù)修改數(shù)組形狀的方法如下。

數(shù)組名.reshape(x0,x1,x2…,xn)

參數(shù)x0,x1,x2,...,xn表示數(shù)組中每個(gè)維度上的大小。例如arr.reshape(3,4)表示生成一個(gè)3行4列新數(shù)組,而原數(shù)組arr不會(huì)改變。如果指定的維度和數(shù)組的元素?cái)?shù)目不吻合,則函數(shù)將拋出異常。4.3.2修改數(shù)組形狀3.用resize()函數(shù)修改數(shù)組形狀

resize()函數(shù)可返回指定大小的新數(shù)組。如果新數(shù)組的大小大于原數(shù)組的大小,則新數(shù)組包含原數(shù)組中的元素的重復(fù)值。resize()函數(shù)修改數(shù)組形狀的方法如下。

數(shù)組名.resize(x0,x1,x2…,xn)或

numpy.resize[數(shù)組名,(x0,x1,x2,…,xn)]

參數(shù)x0,x1,x2,…,xn表示數(shù)組中每個(gè)維度上的大小。例如arr.resize(3,4)表示將arr數(shù)組修改成3行4列數(shù)組,原數(shù)組arr的形狀改變。這種方法與用shape屬性修改數(shù)組形狀相似。4.修改數(shù)組的形狀示例代碼example4-8.py見(jiàn)教材。

4.3.2修改數(shù)組形狀1.ravel()函數(shù)

在NumPy中,可以使用ravel()函數(shù)將多維數(shù)組展平(即變成一維數(shù)組),展平數(shù)組元素的順序通常是“C風(fēng)格”的,就是以行為基準(zhǔn),元素最右邊的索引發(fā)生變化,如元素a[0,0]之后是a[0,1]。即使數(shù)組改變成其他形狀,數(shù)組仍然是“C語(yǔ)言風(fēng)格”的。NumPy通常創(chuàng)建一個(gè)以“C語(yǔ)言風(fēng)格”保存數(shù)據(jù)的數(shù)組,所以使用ravel()函數(shù)時(shí)通常不需要?jiǎng)?chuàng)建調(diào)用數(shù)組的副本。

用ravel()函數(shù)展平數(shù)組的方法如下。

數(shù)組名.ravel()

例如arr.ravel()返回將arr數(shù)組展平成一維新數(shù)組視圖,原數(shù)組arr不改變。4.3.3數(shù)組的展平2.flatten()函數(shù)

flatten()函數(shù)也可用于將多維數(shù)組展平,其與ravel()函數(shù)的功能相同,不過(guò)flatten()函數(shù)會(huì)請(qǐng)求分配內(nèi)存來(lái)保存結(jié)果,而ravel()函數(shù)只返回?cái)?shù)組的一個(gè)視圖(view)。

用flatten()函數(shù)展平數(shù)組的方法如下。

數(shù)組名.flatten()

例如arr.flatten()表示將arr數(shù)組展平成一維新數(shù)組,原數(shù)組arr不改變。3.數(shù)組的展平示例代碼example4-9.py見(jiàn)教材。4.3.3數(shù)組的展平1.transpose()函數(shù)使用transpose()函數(shù)可實(shí)現(xiàn)轉(zhuǎn)置給定數(shù)組的維度,并且返回?cái)?shù)組的1個(gè)視圖。

使用transpose()函數(shù)的方法:

numpy.transpose(arr)

參數(shù)arr表示是要轉(zhuǎn)置的數(shù)組。

例如arr是一個(gè)3行5列數(shù)組,numpy.transpose(arr)函數(shù)就會(huì)返回arr數(shù)組轉(zhuǎn)置為5行3列的數(shù)組視圖,而原數(shù)組arr不改變。2.轉(zhuǎn)置函數(shù).T

轉(zhuǎn)置函數(shù).T屬于ndarray類(lèi),其作用類(lèi)似于transpose()函數(shù)。4.3.4數(shù)組的轉(zhuǎn)置和軸對(duì)換3.rollaxis()函數(shù)

rollaxis()函數(shù)可實(shí)現(xiàn)向后滾動(dòng)特定的軸,直到一個(gè)特定位置。

使用rollaxis()函數(shù)方法:

numpy.rollaxis(arr,axis,start)

其中參數(shù)arr表示數(shù)組,axis表示要向后滾動(dòng)的軸,其它軸的相對(duì)位置不會(huì)改變,start表示滾動(dòng)到特定位置,默認(rèn)為0,表示完整的滾動(dòng)。4.swapaxes()函數(shù)swapaxes()函數(shù)可實(shí)現(xiàn)交換數(shù)組的兩個(gè)軸。對(duì)于1.10之前的NumPy版本,會(huì)返回交換后數(shù)組的視圖。

使用swapaxes()函數(shù)的方法:numpy.swapaxes(arr,axis1,axis2)

參數(shù)arr表示數(shù)組,axis1表示對(duì)應(yīng)第1個(gè)軸的整數(shù),axis2表示對(duì)應(yīng)第2個(gè)軸的整數(shù)。5.翻轉(zhuǎn)數(shù)組的示例代碼example4-10.py見(jiàn)教材。4.3.4數(shù)組的轉(zhuǎn)置和軸對(duì)換1.concatenate()函數(shù)

concatenate()函數(shù)是用于沿指定軸連接相同形狀的兩個(gè)或多個(gè)數(shù)組。

使用concatenate()函數(shù)的方法:numpy.concatenate((arr1,arr2,…,arrn),axis)

參數(shù)arr1,arr2…arrn表示是相同維度的數(shù)組序列,axis表示沿著它連接數(shù)組的軸,默認(rèn)為0。2.stack()函數(shù)

stack()函數(shù)能實(shí)現(xiàn)沿新軸連接數(shù)組序列。此功能添加自NumPy版本1.10.0。

使用stack()函數(shù)的方法:numpy.stack(arrays,axis)

參數(shù)arrays表示相同形狀的數(shù)組序列,axis表示返回?cái)?shù)組中的軸,輸入數(shù)組沿著它來(lái)堆疊。4.3.5數(shù)組的連接3.hstack()函數(shù)

hstack()函數(shù)可通過(guò)堆疊來(lái)生成水平的單個(gè)數(shù)組。

使用hstack()函數(shù)的方法:numpy.hstack(arrays)

參數(shù)arrays表示相同形狀的數(shù)組序列。4.vstack()函數(shù)

vstack()函數(shù)可通過(guò)堆疊來(lái)生成豎直的單個(gè)數(shù)組。

使用vstack()函數(shù)的方法:numpy.vstack(arrays)

參數(shù)arrays表示相同形狀的數(shù)組序列。5.數(shù)組的連接代碼

數(shù)組的連接示例示例example4-11.py見(jiàn)教材。4.3.5數(shù)組的連接1.split()函數(shù)

split()函數(shù)用于沿特定的軸將數(shù)組分割為子數(shù)組。

使用split()函數(shù)的方法:

numpy.split(arr,indices_or_sections,axis)

參數(shù)arr表示被分割的數(shù)組;indices_or_sections表示將數(shù)組arr創(chuàng)建為大小相同的子數(shù)組的數(shù)量,可以為整數(shù),如果該參數(shù)是一維數(shù)組,則該參數(shù)表示在數(shù)組arr中的分割點(diǎn),函數(shù)將按照分割點(diǎn)來(lái)分割數(shù)組arr;axis表示返回?cái)?shù)組中的軸,默認(rèn)為0,表示豎直方向分割,1表示水平方向分割。4.3.6數(shù)組的分割2.hsplit()函數(shù)

hsplit()函數(shù)是split()函數(shù)的特例,它是將數(shù)組沿著水平方向分割,即將一個(gè)數(shù)組按列分割為多個(gè)子數(shù)組。

使用hsplit()函數(shù)的方法:numpy.hsplit(arr,indices_or_sections)

參數(shù)arr表示被分割的數(shù)組;indices_or_sections表示將數(shù)組arr創(chuàng)建為大小相同的子數(shù)組的數(shù)量,如果此參數(shù)是一維數(shù)組,則該參數(shù)表示在數(shù)組arr中的分割點(diǎn),函數(shù)將按照分割點(diǎn)來(lái)分割數(shù)組arr。4.3.6數(shù)組的分割3.vsplit()函數(shù)

vsplit()函數(shù)是split()函數(shù)的特例,它是將數(shù)組沿著豎直方向分割,即將一個(gè)數(shù)組按行分割為多個(gè)子數(shù)組。使用vsplit()函數(shù)的方法:numpy.vsplit(arr,indices_or_sections)

參數(shù)arr表示被分割的數(shù)組;indices_or_sections表示將數(shù)組arr創(chuàng)建為大小相同的子數(shù)組的數(shù)量,如果此參數(shù)是一維數(shù)組,則該參數(shù)表示在數(shù)組arr中的分割點(diǎn),函數(shù)將按照分割點(diǎn)來(lái)分割數(shù)組arr。4.數(shù)組的分割示例example4-12.py見(jiàn)教材。4.3.6數(shù)組的分割

在NumPy中,將數(shù)組轉(zhuǎn)換成列表是用tolist()函數(shù),使用tolist()函數(shù)的方法:

數(shù)組名.tolist()

示例代碼見(jiàn)教材。4.3.7數(shù)組轉(zhuǎn)換1.append()函數(shù)

append()函數(shù)是在數(shù)組的末尾添加元素,使用append()函數(shù)的方法:

numpy.append(arr,values,axis)

參數(shù)arr表示輸入的數(shù)組;values表示向arr數(shù)組添加的元素,values為數(shù)組,當(dāng)axis=0時(shí),values數(shù)組列維度與數(shù)組arr列維度相同,當(dāng)axis=1時(shí),values數(shù)組行維度與數(shù)組arr行維度相同;axis表示沿著水平或豎直方向完成添加操作的軸,axis取0表示沿豎直方向操作,axis取1表示沿水平方向操作。如果未提供axis值,在添加操作之前輸入數(shù)組會(huì)被展開(kāi),values可以是單元素,也可以是任意數(shù)組,將values添加到arr數(shù)組后,該函數(shù)會(huì)返回一個(gè)新數(shù)組,而原數(shù)組不變。append()函數(shù)的示例代碼example4-13.py見(jiàn)教材。

4.3.8添加刪除數(shù)組元素2.insert()函數(shù)

insert()函數(shù)在給定索引之前,沿給定軸在輸入數(shù)組中插入元素。

使用insert()函數(shù)的方法如下。numpy.insert(arr,obj,values,axis)

其中,參數(shù)arr表示輸入的數(shù)組;obj表示插入值的索引位置;values表示向arr數(shù)組插入的值。

axis表示沿水平或豎直方向完成添加操作的軸,axis取0表示沿豎直方向操作,axis取1表示沿水平方向操作。

當(dāng)axis=0時(shí),values為數(shù)組,即在arr數(shù)組行索引位于obj的位置處插入values值,并且values數(shù)組列維度與arr數(shù)組列維度相同;當(dāng)axis=1時(shí),values也為數(shù)組,即在arr數(shù)組列索引位于obj的位置處插入values值,并且values數(shù)組行維度與arr數(shù)組行維度相同;如果未提供axis值,在插入之前arr數(shù)組會(huì)被展開(kāi)為一維數(shù)組,values可以是單元素,也可以是數(shù)組,在arr數(shù)組列索引位于obj的位置處插入values的元素,該函數(shù)會(huì)返回一個(gè)新數(shù)組,而原數(shù)組不變。

4.3.8添加刪除數(shù)組元素2.insert()函數(shù)

insert()函數(shù)在給定索引之前,沿給定軸在輸入數(shù)組中插入元素。

使用insert()函數(shù)的方法如下。numpy.insert(arr,obj,values,axis)

另外,insert()函數(shù)如果傳遞了axis參數(shù),若values的值是單元素,則會(huì)以廣播值數(shù)組作為輸入元素,即np.insert(arr,2,9,axis=0),其中values為9,arr是2行4列數(shù)組,由于axis=0,則插入元素的數(shù)組列維度與arr數(shù)組列維度相同,因此,插入元素?cái)?shù)組為1行4列數(shù)組,也就是廣播值數(shù)組[9,9,9,9]。

示例代碼example4-14.py4.3.8添加刪除數(shù)組元素3.delete()函數(shù)

delete()函數(shù)返回從輸入數(shù)組中刪除指定子數(shù)組的新數(shù)組,原數(shù)組不變。與insert()函數(shù)的情況一樣,如果未提供軸參數(shù),則輸入數(shù)組將展開(kāi)。

使用delete()函數(shù)的方法:numpy.delete(arr,obj,axis)

其中,參數(shù)arr表示輸入的數(shù)組;obj是用整數(shù)或者整數(shù)數(shù)組表示的從輸入數(shù)組中刪除的子數(shù)組;axis表示沿著它刪除給定子數(shù)組的軸,如果未提供axis值,則輸入數(shù)組會(huì)被展開(kāi)。

delete()函數(shù)的示例代碼example4-15.py。4.3.8添加刪除數(shù)組元素

在NumPy中,數(shù)組可以直接進(jìn)行加法、減法、乘法、除法、指數(shù)、求倒數(shù)、取相反數(shù)、位運(yùn)算等運(yùn)算,而不需要使用煩瑣的for循環(huán)之類(lèi)的算法,并且在進(jìn)行除法運(yùn)算時(shí),遇到除數(shù)為0的情況時(shí),會(huì)自動(dòng)提示無(wú)效運(yùn)算,但是仍會(huì)將計(jì)算結(jié)果顯示出來(lái),無(wú)效值處用NaN或inf表示。在數(shù)組運(yùn)算中,相同形狀的數(shù)組按元素級(jí)進(jìn)行逐個(gè)元素運(yùn)算,而不同形狀的數(shù)組則按廣播機(jī)制進(jìn)行運(yùn)算,并且在數(shù)組運(yùn)算后,將返回包含運(yùn)算結(jié)果的新數(shù)組。1.相同形狀數(shù)組的運(yùn)算

首先創(chuàng)建兩個(gè)相同形狀的數(shù)組arr_a和arr_b,現(xiàn)分別對(duì)它們進(jìn)行加法、減法、乘法、除法、取相反數(shù)、平方和按位異或運(yùn)算。觀察其輸出結(jié)果,發(fā)現(xiàn)兩個(gè)數(shù)組的運(yùn)算就是對(duì)這兩個(gè)數(shù)組中索引相同的元素進(jìn)行運(yùn)算。如果是一個(gè)數(shù)組的運(yùn)算,則對(duì)數(shù)組中的所有元素都進(jìn)行相同運(yùn)算。例如計(jì)算數(shù)組平方,就是對(duì)數(shù)組中每個(gè)元素都進(jìn)行平方運(yùn)算。4.4.1數(shù)組的運(yùn)算2.不同形狀數(shù)組的運(yùn)算(廣播機(jī)制)

當(dāng)兩個(gè)數(shù)組的形狀不一致時(shí),低維數(shù)組會(huì)自動(dòng)將維度擴(kuò)充到與高維數(shù)組的一致,然后按元素逐個(gè)運(yùn)算,這就是數(shù)組的廣播機(jī)制。為了更好地使用廣播機(jī)制,需要遵循4個(gè)原則。

(1)讓所有的輸入數(shù)組向其中維數(shù)最多的數(shù)組看齊,shape屬性中不足的部分通過(guò)加1將維數(shù)補(bǔ)齊。

(2)輸出數(shù)組shape屬性是輸入數(shù)組shape屬性的各個(gè)軸上的最大值。

(3)如果輸入數(shù)組的某個(gè)軸和輸出數(shù)組的對(duì)應(yīng)軸的長(zhǎng)度相同或者其長(zhǎng)度為1,則這個(gè)數(shù)組能夠用來(lái)運(yùn)算,否則會(huì)報(bào)錯(cuò)。

(4)當(dāng)輸入數(shù)組的某個(gè)軸的長(zhǎng)度為1時(shí),沿此軸進(jìn)行運(yùn)算時(shí)使用此軸上的第一組值。示例代碼見(jiàn)教材。4.4.1數(shù)組的運(yùn)算3.數(shù)組和標(biāo)量之間的運(yùn)算

在NumPy中,數(shù)組的運(yùn)算稱(chēng)為矢量化運(yùn)算。形狀相同的數(shù)組之間的任何算術(shù)運(yùn)算都將應(yīng)用到元素級(jí)。標(biāo)量是只有大小、沒(méi)有方向的數(shù)據(jù),數(shù)組和標(biāo)量之間的算術(shù)運(yùn)算就是將這個(gè)標(biāo)量傳播到數(shù)組的各個(gè)元素,即將數(shù)組中的每個(gè)元素都與標(biāo)量進(jìn)行運(yùn)算。

例如,創(chuàng)建2行3列數(shù)組arr=np.arange(6).reshape(2,3),現(xiàn)在計(jì)算arr-1,其中1就是標(biāo)量,則arr-1相當(dāng)于將arr數(shù)組中的每個(gè)元素都減去標(biāo)量1。4.4.1數(shù)組的運(yùn)算

NumPy中的ufunc對(duì)象也稱(chēng)為ufunc函數(shù),它包含了對(duì)數(shù)組進(jìn)行處理的通用函數(shù)。通用函數(shù)是針對(duì)ndarray數(shù)組對(duì)象執(zhí)行元素級(jí)運(yùn)算的函數(shù),即通用函數(shù)會(huì)對(duì)數(shù)組中的每一個(gè)元素值作用后產(chǎn)生新的元素值,并返回新的元素值組成的數(shù)組,因此,通用函數(shù)都是以NumPy數(shù)組作為輸出。

常用的一元通用函數(shù)說(shuō)明見(jiàn)教材表4-6

常用的二元通用函數(shù)說(shuō)明見(jiàn)教材表4-7【例4-1】定義arr為0至9的一維數(shù)組,運(yùn)用通用函數(shù)完成下列計(jì)算。

見(jiàn)示例代碼test4-1.py。4.4.2通用函數(shù)

NumPy中包含兩種基本的數(shù)據(jù)類(lèi)型,即數(shù)組和矩陣。NumPy中的矩陣對(duì)象為matrix,它包含有矩陣的數(shù)據(jù)處理、計(jì)算和轉(zhuǎn)置以及可逆性等。matrix是多維數(shù)組(ndarray)的子類(lèi),矩陣是繼承自NumPy數(shù)組的二維數(shù)組對(duì)象,因此,矩陣含有數(shù)組的所有屬性和方法。

矩陣有幾個(gè)特有的屬性使計(jì)算更加容易,這些屬性如下。

matrix.T:返回自身的轉(zhuǎn)置。

matrix.H:返回自身的共軛轉(zhuǎn)置。

matrix.I:返回自身的逆矩陣。

matrix.A:返回自身數(shù)據(jù)的二維數(shù)組的一個(gè)視圖(沒(méi)有進(jìn)行任何的復(fù)制)。

矩陣對(duì)象也可以使用其他的矩陣對(duì)象、字符串或者其他的可以轉(zhuǎn)換為一個(gè)多維數(shù)組的參數(shù)來(lái)構(gòu)造。下面介紹矩陣的創(chuàng)建、運(yùn)算及操作。4.5NumPy矩陣創(chuàng)建、計(jì)算及操作1.矩陣的創(chuàng)建

在NumPy中,使用mat()、matrix()以及bmat()函數(shù)創(chuàng)建矩陣的方法如下。

(1)用字符串創(chuàng)建矩陣

在mat()函數(shù)中輸入一個(gè)MATLAB風(fēng)格的字符串,該字符串以空格分隔列、以分號(hào)分隔行,例如numpy.mat('123;456;789'),可創(chuàng)建一個(gè)3行3列矩陣,矩陣中的元素為整數(shù)。

(2)用嵌套序列創(chuàng)建矩陣

在mat()函數(shù)中輸入嵌套序列,例如numpy.mat([[2,4,6,8],[1.0,3,5,7.0]]),可創(chuàng)建一個(gè)2行4列的矩陣,矩陣中的元素為浮點(diǎn)數(shù)。4.5NumPy矩陣創(chuàng)建、計(jì)算及操作1.矩陣的創(chuàng)建

(3)用數(shù)組創(chuàng)建矩陣

在mat()函數(shù)中輸入數(shù)組,例如numpy.mat(numpy.arange(9).reshape(3,3)),可創(chuàng)建一個(gè)3行3列的矩陣,矩陣中的元素為整數(shù)。

(4)用matrix()函數(shù)創(chuàng)建矩陣

使用matrix()函數(shù)可以將字符串、嵌套序列、數(shù)組和matrix轉(zhuǎn)換成矩陣,其格式:

matrix(data,dtype=None,copy=True)

其中,data是指輸入的用于轉(zhuǎn)換為矩陣的數(shù)據(jù)。如果dtype是None,那么數(shù)據(jù)類(lèi)型將由data的內(nèi)容來(lái)決定。如果copy為T(mén)rue,則會(huì)復(fù)制data中的數(shù)據(jù),否則會(huì)使用原來(lái)的數(shù)據(jù)緩沖。如果沒(méi)有找到數(shù)據(jù)的緩沖區(qū),當(dāng)然也會(huì)進(jìn)行數(shù)據(jù)復(fù)制。這說(shuō)明用matrix()函數(shù)創(chuàng)建矩陣,如果修改矩陣的值,不會(huì)改變輸入matrix()函數(shù)的data的數(shù)據(jù)值。

4.5NumPy矩陣創(chuàng)建、計(jì)算及操作1.矩陣的創(chuàng)建

注意:用mat()函數(shù)創(chuàng)建矩陣時(shí),若輸入matrix或ndarray對(duì)象,則不會(huì)為它們創(chuàng)建副本。

(5)用bmat()函數(shù)創(chuàng)建矩陣

如果想將小矩陣組合成大矩陣,在NumPy中,可以使用bmat()函數(shù)實(shí)現(xiàn),其格式:bmat(obj,ldict=None,gdict=None)

其中,obj為matrix;ldict和gdict為None。

示例代碼example4-17.py4.5NumPy矩陣創(chuàng)建、計(jì)算及操作2.矩陣的計(jì)算及操作

在NumPy中,矩陣的計(jì)算是針對(duì)整個(gè)矩陣中的每個(gè)元素進(jìn)行的,不需要使用for循環(huán),而且運(yùn)算效率更高。在矩陣的加、減、除法運(yùn)算時(shí),只有相同的行數(shù)和列數(shù)矩陣才能相互進(jìn)行計(jì)算,否則會(huì)拋出程序異常。

矩陣的乘法計(jì)算有計(jì)算矢量積和計(jì)算數(shù)量積兩種方式,如果計(jì)算矢量積,則運(yùn)算符采用星號(hào)(*),并且星號(hào)左邊矩陣的列數(shù)要與星號(hào)右邊矩陣的行相等,運(yùn)算結(jié)果是矩陣中對(duì)應(yīng)元素相乘的累加和。如果計(jì)算數(shù)量積,也稱(chēng)為矩陣的點(diǎn)乘操作,則使用multiply函數(shù)。

矩陣常用的操作有矩陣轉(zhuǎn)置

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論