




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Python大數(shù)據(jù)分析工具NumPy用法目錄TOC\o"1-1"\h\u6611.1NumPy簡介 382371.2NumPy環(huán)境安裝配置 4296021.3ndarray對(duì)象 6110651.4數(shù)據(jù)類型 826901.5數(shù)組屬性 10180941.6數(shù)組創(chuàng)建例程 13326411.7切片和索引 18232171.8廣播 2138621.9數(shù)組與元素操作 23233521.10位操作與字符串函數(shù) 47187681.11數(shù)學(xué)運(yùn)算函數(shù) 5072321.12算術(shù)運(yùn)算 53198981.13統(tǒng)計(jì)函數(shù) 56298571.14排序、搜索和計(jì)數(shù)函數(shù) 60244111.15字節(jié)交換 6332141.16副本和視圖 64229751.17矩陣庫 66238111.18線性代數(shù)模塊 6859231.19Matplotlib庫 71203971.20Matplotlib 繪制直方圖 7464671.21IO文件操作 75110261.22NumPy實(shí)例:GPS定位 7644461.23小結(jié) 80Python大數(shù)據(jù)分析工具NumPy用法Python是數(shù)據(jù)處理常用的工具,可以處理數(shù)量級(jí)從幾千字節(jié)至幾太字節(jié)不等的數(shù)據(jù),具有較高的開發(fā)效率和可維護(hù)性,還具有較強(qiáng)的通用性和跨平臺(tái)性。Python可用于數(shù)據(jù)分析,但其單純依賴Python本身自帶的庫進(jìn)行數(shù)據(jù)分析還是具有一定的局限性的,需要安裝第三方擴(kuò)展庫來增強(qiáng)分析和挖掘能力。Python數(shù)據(jù)分析需要安裝的第三方擴(kuò)展庫有:NumPy、Pandas、SciPy、Matplotlib、Scikit-Learn、Keras、Gensim等。NumPy簡介NumPy是Python的一個(gè)科學(xué)計(jì)算的庫,提供了矩陣運(yùn)算的功能,其一般與SciPy、Matplotlib一起使用。其實(shí),List已經(jīng)提供了類似于矩陣的表示形式,不過NumPy為我們提供了更多的函數(shù)。如果接觸過Matlab、Scilab,那么NumPy很好入手。NumPy是一個(gè)Python包。它代表NumericPython。它是一個(gè)由多維數(shù)組對(duì)象和用于處理數(shù)組的例程集合組成的庫。Numeric是NumPy的前身,是由JimHugunin開發(fā)的。他還開發(fā)了另一個(gè)包Numarray,擁有一些額外的功能。2005年,TravisOliphant通過將Numarray的功能集成到Numeric包中來創(chuàng)建NumPy包。這個(gè)開源項(xiàng)目有很多貢獻(xiàn)者。數(shù)組的算術(shù)和邏輯運(yùn)算。傅里葉變換和用于圖形操作的例程。與線性代數(shù)有關(guān)的操作,NumPy擁有線性代數(shù)和隨機(jī)數(shù)生成的內(nèi)置函數(shù)。NumPy通常與SciPy(ScientificPython)和Matplotlib(繪圖庫)一起使用。這種組合廣泛用于替代Matlab,是一個(gè)流行的技術(shù)計(jì)算平臺(tái)。Python作為Matlab的替代方案,現(xiàn)在被視為一種更加現(xiàn)代和完整的編程語言。NumPy環(huán)境安裝配置標(biāo)準(zhǔn)的Python發(fā)行版不會(huì)與NumPy模塊捆綁在一起。一個(gè)輕量級(jí)的替代方法是使用流行的Python包安裝程序pip來安裝NumPy(\h/~gohlke/pythonlibs/)。 pipinstallnumpy 啟用NumPy的方法是使用操作系統(tǒng)的可安裝的二進(jìn)制包。這些二進(jìn)制包包含完整的SciPy技術(shù)棧(包括NumPy、SciPy、Matplotlib、IPython、SymPy以及Python核心自帶的其他包)。WindowsAnaconda(\hwww.continuum.io)是一個(gè)帶有SciPy技術(shù)棧的免費(fèi)Python發(fā)行版。它可用于Linux和Mac系統(tǒng)。Canopy(\h/products/canopy/)是可用的免費(fèi)和商業(yè)發(fā)行版,帶有完整的SciPy技術(shù)棧,可用于Windows,Linux和Mac系統(tǒng)。Python(x,y)(\hwww.python-xy.github.io/)是一個(gè)免費(fèi)的Python發(fā)行版,帶有SciPy技術(shù)棧和SpyderIDE,可用于Windows。LinuxLinux發(fā)行版的相應(yīng)軟件包管理器可用于安裝一個(gè)或多個(gè)SciPy技術(shù)棧中的軟件包。Ubuntusudoapt-getinstallpython-numpysudoapt-getinstallpython-numpypython-scipypython-matplotlibipythonipythonnotebookpython-pandaspython-sympypython-noseFedorasudoyuminstallnumpyscipypython-matplotlibipythonpython-pandassympypython-noseatlas-develsudoyuminstallnumpyscipypython-matplotlibipythonpython-pandassympypython-noseatlas-devel從源碼構(gòu)建核心Python(2.6.x、2.7.x和3.2.x起)必須安裝distutils,zlib模塊應(yīng)該啟用。GNU(4.2及以上)C編譯器(GCC)必須可用。要安裝NumPy,請運(yùn)行以下命令。 Pythonsetup.pyinstall 要測試NumPy模塊是否正確安裝,可嘗試從Python提示符導(dǎo)入它。如果未安裝,那么將顯示以下錯(cuò)誤消息:ndarray對(duì)象NumPy中定義的最重要的對(duì)象是稱為ndarray的N維數(shù)組類型。它描述相同類型的元素集合,可以使用基于零的索引訪問集合中的項(xiàng)目。ndarray中的每個(gè)元素在內(nèi)存中使用相同大小的塊。ndarray中的每個(gè)元素是數(shù)據(jù)類型對(duì)象的對(duì)象(稱為dtype)。從ndarray對(duì)象提取的任何元素(通過切片)由一個(gè)數(shù)組標(biāo)量類型的Python對(duì)象表示。圖3.1顯示了ndarray數(shù)據(jù)類型對(duì)象(dtype)和數(shù)組標(biāo)量類型之間的關(guān)系。圖3.1ndarray數(shù)據(jù)類型對(duì)象(dtype)和數(shù)組標(biāo)量類型之間的關(guān)系ndarray類的實(shí)例可以通過不同的數(shù)組創(chuàng)建例程來構(gòu)造?;镜膎darray是使用NumPy中的數(shù)組函數(shù)創(chuàng)建的,如下所示: numpy.array 它從任何暴露數(shù)組接口的對(duì)象或從返回?cái)?shù)組的任何方法創(chuàng)建一個(gè)ndarray。numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndnumpy.array(object,dtype=None,copy=True,order=None,subok=False,nd=0)上面的構(gòu)造器接收以下參數(shù):object:任何暴露數(shù)組接口方法的對(duì)象都會(huì)返回一個(gè)數(shù)組或任何(嵌套)序列。dtype:數(shù)組所需的數(shù)據(jù)類型,可選。copy:可選,默認(rèn)為true,對(duì)象是否被復(fù)制。order:C(按行)、F(按列)或A(任意,默認(rèn))。subok:默認(rèn)情況下,返回的數(shù)組強(qiáng)制為基類數(shù)組。如果為true,就返回子類。ndmin:指定返回?cái)?shù)組的最小維數(shù)?!纠?.1】importnumpyasnpimportnumpyasnpa=np.array([1,2,3])printa輸出如下: [1,2,3] 【例3.2】##多于一個(gè)維度importnumpyasnpa=np.array([[1,2],[3,4]])printa輸出如下:[[1,2][[1,2][3,4]]【例3.3】##最小維度importnumpyasnpa=np.array([1,2,3,4,5],ndmin=2)printa輸出如下: [[1,2,3,4,5]] 【例3.4】#dtype#dtype參數(shù)importnumpyasnpa=np.array([1,2,3],dtype=complex)printa輸出如下: [1.+0.j,2.+0.j,3.+0.j] ndarray對(duì)象由計(jì)算機(jī)內(nèi)存中的一維連續(xù)區(qū)域組成,帶有將每個(gè)元素映射到內(nèi)存塊中某個(gè)位置的索引方案。內(nèi)存塊以按行(C風(fēng)格)或按列(Fortran或MATLAB風(fēng)格)的方式保存元素。數(shù)據(jù)類型NumPy數(shù)據(jù)類型NumPy支持比Python更多種類的數(shù)據(jù)類型。表3.1定義了不同標(biāo)量的數(shù)據(jù)類型。表3.1不同標(biāo)量的數(shù)據(jù)類型NumPy數(shù)值類型是dtype(數(shù)據(jù)類型)對(duì)象的實(shí)例,每個(gè)對(duì)象具有唯一的特征。這些類型可以是np.bool_、np.float32等。數(shù)據(jù)類型對(duì)象(dtype)數(shù)據(jù)類型對(duì)象描述了對(duì)應(yīng)于數(shù)組的固定內(nèi)存塊的解釋,取決于以下5個(gè)方面:數(shù)據(jù)類型(整數(shù)、浮點(diǎn)數(shù)或者Python對(duì)象)。數(shù)據(jù)大小。字節(jié)序(小端或大端)。在結(jié)構(gòu)化類型的情況下,字段的名稱、每個(gè)字段的數(shù)據(jù)類型和每個(gè)字段占用的內(nèi)存塊部分。數(shù)據(jù)類型是子序列的形狀和數(shù)據(jù)類型。字節(jié)順序取決于數(shù)據(jù)類型的前綴“<”或“>”。<意味著編碼是小端(最小有效字節(jié)存儲(chǔ)在最小地址中),>意味著編碼是大端(最大有效字節(jié)存儲(chǔ)在最小地址中)。dtype可由以下語法構(gòu)造: numpy.dtype(object,align,copy) 參數(shù)說明如下:object:被轉(zhuǎn)換為數(shù)據(jù)類型的對(duì)象。align:如果為true,就向字段添加間隔,使其類似C的結(jié)構(gòu)體。copy:生成dtype對(duì)象的新副本,如果為false,結(jié)果就是內(nèi)建數(shù)據(jù)類型對(duì)象的引用。【例3.5】##使用數(shù)組標(biāo)量類型importnumpyasnpdt=np.dtype(32)printdt輸出如下: int32 【例3.6】##首先創(chuàng)建結(jié)構(gòu)化數(shù)據(jù)類型importnumpyasnpdt=np.dtype([('age',8)])printdt輸出如下: [('age','i1')] 【例3.7】##現(xiàn)在將其應(yīng)用于ndarray對(duì)象importnumpyasnpdt=np.dtype([('age',8)])a=np.array([(10,),(20,),(30,)],dtype=dt)printa輸出如下: [(10,)(20,)(30,)] 每個(gè)內(nèi)建類型都有一個(gè)唯一定義它的字符代碼:'b':布爾值。'i':符號(hào)整數(shù)。'u':無符號(hào)整數(shù)。'f':浮點(diǎn)數(shù)。'c':復(fù)數(shù)浮點(diǎn)數(shù)。'm':時(shí)間間隔。'M':日期時(shí)間。'O':Python'S''a':字節(jié)串。'U':Unicode。'V':原始數(shù)據(jù)(void)。數(shù)組屬性這一節(jié)討論NumPy的多種數(shù)組屬性。shape語法:ndarray.shape這一數(shù)組屬性返回一個(gè)包含數(shù)組維度的元組,它也可以用于調(diào)整數(shù)組大小。【例3.8】importnumpyasnpimportnumpyasnpa=np.array([[1,2,3],[4,5,6]])printa.shape輸出如下:(2,3)(2,3)【例3.9】##這會(huì)調(diào)整數(shù)組大小importnumpyasnpa=np.array([[1,2,3],[4,5,6]])a.shape=(3,2)printa輸出如下:[[1,[[1,2][3,4][5,6]]【例3.10】NumPy還提供了reshape函數(shù)來調(diào)整數(shù)組大小。importnumpyasnpimportnumpyasnpa=np.array([[1,2,3],[4,5,6]])b=a.reshape(3,2)printb輸出如下:[[1,[[1,2][3,4][5,6]]ndim語法:ndarray.ndim這一數(shù)組屬性返回?cái)?shù)組的維數(shù)。【例3.11】##等間隔數(shù)字的數(shù)組importnumpyasnpa=np.arange(24)printa.ndim輸出如下:[012345678910111213141516171819202122[01234567891011121314151617181920212223]【例3.12】##一維數(shù)組importnumpyasnpa=np.arange(24)a.ndim##現(xiàn)在調(diào)整其大小b=a.reshape(2,4,3)printb#b現(xiàn)在擁有3個(gè)維度輸出如下:[[[0,1,[[[0,1,2][3,4,5][6,7,8][9,10,11]][[12,13,14][15,16,17][18,19,20][21,22,23]]]itemsize語法:numpy.itemsize這一數(shù)組屬性返回?cái)?shù)組中每個(gè)元素的字節(jié)單位長度?!纠?.13】##數(shù)組的dtype為int8(一字節(jié))importnumpyasnpx=np.array([1,2,3,4,5],dtype=8)printx.itemsize輸出如下: 1 flags語法:numpy.flagsndarray對(duì)象擁有以下屬性。這個(gè)函數(shù)返回了它們的當(dāng)前值?!纠?.14】展示當(dāng)前的標(biāo)志。importnumpyasnpimportnumpyasnpx=np.array([1,2,3,4,5])printx.flags輸出如下:C_CONTIGUOUS:TrueF_CONTIGUOUS:TrueOWNDATA:TrueWRITEABLE:TrueALIGNED:TrueC_CONTIGUOUS:TrueF_CONTIGUOUS:TrueOWNDATA:TrueWRITEABLE:TrueALIGNED:True UPDATEIFCOPY:False 表3.2列出了ndarray對(duì)象的屬性及描述。表3.2ndarray對(duì)象屬性數(shù)組創(chuàng)建例程N(yùn)umPy數(shù)組創(chuàng)建例程新的ndarray對(duì)象可以通過下列數(shù)組創(chuàng)建例程或使用低級(jí)ndarray構(gòu)造函數(shù)構(gòu)造。語法:numpy.empty創(chuàng)建指定形狀和dtype的未初始化數(shù)組。該函數(shù)的用法如下:numpy.empty(shape,dtype=float,order='C')構(gòu)造器接收下列參數(shù):shape:空數(shù)組的形狀,整數(shù)或整數(shù)元組。dtype:所需的輸出數(shù)組類型,可選。order:'C'為按行的C風(fēng)格數(shù)組,'F'為按列的Fortran風(fēng)格數(shù)組?!纠?.15】下面是一個(gè)展示空數(shù)組的例子:importnumpyasnpimportnumpyasnpx=np.empty([3,2],dtype=int)printx輸出如下:[[22649312[[22649312 1701344351][18183217591885959276][16779776 156368896]]注意:數(shù)組元素為隨機(jī)值,因?yàn)樗鼈兾闯跏蓟?。語法:numpy.zeros返回特定大小,以0填充的新數(shù)組。該函數(shù)的用法如下:numpy.zeros(shape,dtype=float,order='C')構(gòu)造器接收下列參數(shù):shape:空數(shù)組的形狀,整數(shù)或整數(shù)元組。dtype:所需的輸出數(shù)組類型,可選。order:'C'為按行的C風(fēng)格數(shù)組,'F'為按列的Fortran風(fēng)格數(shù)組?!纠?.16】##含有5個(gè)0的數(shù)組,默認(rèn)類型為floatimportnumpyasnpx=np.zeros(5)printx輸出如下:[0.0.0.0.0.][0.0.0.0.0.]語法:numpy.ones返回特定大小,以1填充的新數(shù)組。該函數(shù)的用法如下:numpy.ones(shape,dtype=None,order='C')構(gòu)造器接收下列參數(shù):shape:空數(shù)組的形狀,整數(shù)或整數(shù)元組。dtype:所需的輸出數(shù)組類型,可選。order:'C'為按行的C風(fēng)格數(shù)組,'F'為按列的Fortran風(fēng)格數(shù)組?!纠?.17】##含有5個(gè)1的數(shù)組,默認(rèn)類型為floatimportnumpyasnpx=np.ones(5)printx輸出如下:[1.1.1.1.1.][1.1.1.1.1.]NumPy現(xiàn)有數(shù)據(jù)數(shù)組語法:numpy.asarray該函數(shù)類似于numpy.array,除了它有較少的參數(shù)外。這個(gè)例程對(duì)于將Python序列轉(zhuǎn)換為ndarray非常有用。該函數(shù)的用法如下:numpy.asarray(a,dtype=None,order=None)構(gòu)造器接收下列參數(shù):a:任意形式的輸入?yún)?shù),比如列表、列表的元組、元組、元組的元組、元組的列表。dtype:通常輸入數(shù)據(jù)的類型會(huì)應(yīng)用到返回的ndarray。order:'C'為按行的C風(fēng)格數(shù)組,'F'為按列的Fortran風(fēng)格數(shù)組。【例3.18】##將列表轉(zhuǎn)換為ndarrayimportnumpyasnpx=[1,2,3]a=np.asarray(x)printa輸出如下: [123] 【例3.19】##設(shè)置了dtypeimportnumpyasnpx=[1,2,3]a=np.asarray(x,dtype=float)printa輸出如下: [1.2.3.] 語法:numpy.frombuffer此函數(shù)將緩沖區(qū)解釋為一維數(shù)組。暴露緩沖區(qū)接口的任何對(duì)象都用作參數(shù)來返回ndarray。該函數(shù)的用法如下:numpy.frombuffer(buffer,dtype=float,count=-1,offset=0)構(gòu)造器接收下列參數(shù):buffer:任何暴露緩沖區(qū)接口的對(duì)象。dtype:返回?cái)?shù)組的數(shù)據(jù)類型,默認(rèn)為float。count:需要讀取的數(shù)據(jù)數(shù)量,默認(rèn)為-1,讀取所有數(shù)據(jù)。offset:需要讀取的起始位置,默認(rèn)為0?!纠?.20】frombuffer函數(shù)的用法:importnumpyasnps='HelloWorld'importnumpyasnps='HelloWorld'a=np.frombuffer(s,dtype='S1')printa輸出如下: ['H''e''l''l''o''''W''o''r''l''d'] 語法:numpy.fromiter此函數(shù)從任何可迭代對(duì)象構(gòu)建一個(gè)ndarray對(duì)象,返回一個(gè)新的一維數(shù)組。該函數(shù)的用法如下:numpy.fromiter(iterable,dtype,count=-1)構(gòu)造器接收下列參數(shù):iterable:任何可迭代對(duì)象。dtype:返回?cái)?shù)組的數(shù)據(jù)類型。count:需要讀取的數(shù)據(jù)數(shù)量,默認(rèn)為-1,讀取所有數(shù)據(jù)。【例3.21】使用內(nèi)置的range()函數(shù)返回列表對(duì)象,此列表的迭代器用于形成ndarray對(duì)象。##使用range函數(shù)創(chuàng)建列表對(duì)象importnumpyasnplist=range(5)printlist輸出如下: [0,1,2,3,4] NumPy數(shù)值范圍數(shù)組語法:numpy.arange該函數(shù)從數(shù)值范圍創(chuàng)建數(shù)組,返回ndarray對(duì)象,包含給定范圍內(nèi)的等間隔值。該函數(shù)的用法如下:numpy.arange(start,stop,step,dtype)構(gòu)造器接收下列參數(shù):start:范圍的起始值,默認(rèn)為0。stop:范圍的終止值(不包含)。step:兩個(gè)值的間隔,默認(rèn)為1。dtype:返回ndarray的數(shù)據(jù)類型,如果沒有提供,就會(huì)使用輸入數(shù)據(jù)的類型?!纠?.22】importnumpyasnpx=np.arange(5)printximportnumpyasnpx=np.arange(5)printx輸出如下: [01234] 語法:numpy.linspace該函數(shù)類似于arange()函數(shù)。在此函數(shù)中,指定了范圍之間的均勻間隔數(shù)量,而不是步長。該函數(shù)的用法如下:numpy.linspace(start,stop,num,endpoint,retstep,dtype)構(gòu)造器接收下列參數(shù):start:序列的起始值。stop:序列的終止值,如果endpoint為true,該值就包含于序列中。num:要生成的等間隔樣例數(shù)量,默認(rèn)為50。endpoint:序列中是否包含stop值,默認(rèn)為ture。retstep:如果為true,就返回樣例以及連續(xù)數(shù)字之間的步長。dtype:輸出ndarray的數(shù)據(jù)類型?!纠?.23】importnumpyasnpimportnumpyasnpx=np.linspace(10,20,5)printx輸出如下: [10.12.515.17.520.] 語法:numpy.logspace該函數(shù)返回一個(gè)ndarray對(duì)象,其中包含在對(duì)數(shù)刻度上均勻分布的數(shù)字。刻度的開始和結(jié)束端點(diǎn)是某個(gè)底數(shù)的冪,通常為10。該函數(shù)的用法如下:numpy.logscale(start,stop,num,endpoint,base,dtype)logspace函數(shù)的輸出由以下參數(shù)決定:start:起始值是base**start。stop:終止值是base**stop。num:范圍內(nèi)的數(shù)值數(shù)量,默認(rèn)為50。endpoint:如果為true,終止值就包含在輸出數(shù)組中。base:對(duì)數(shù)空間的底數(shù),默認(rèn)為10。dtype:輸出數(shù)組的數(shù)據(jù)類型,如果沒有提供,就取決于其他參數(shù)?!纠?.24】importnumpyasnp#importnumpyasnp#默認(rèn)底數(shù)是10a=np.logspace(1.0,2.0,num=10)printa輸出如下:切片和索引ndarray對(duì)象的內(nèi)容可以通過索引或切片來訪問和修改,就像Python的內(nèi)置容器對(duì)象一樣。如前所述,ndarray對(duì)象中的元素遵循基于零的索引。有3種可用的索引方法類型:字段訪問、基本切片和高級(jí)索引。切片基本切片是Python中基本切片概念到n維的擴(kuò)展。通過將start、stop和step參數(shù)提供給內(nèi)置的slice函數(shù)來構(gòu)造一個(gè)Pythonslice對(duì)象。此slice對(duì)象被傳遞給數(shù)組來提取數(shù)組的一部分。【例3.25】importnumpyasnpa=np.arange(10)s=slice(2,7,2)printimportnumpyasnpa=np.arange(10)s=slice(2,7,2)printa[s]輸出如下: [246] 在【例3.25】中,ndarray對(duì)象由arange()函數(shù)創(chuàng)建。然后,分別用起始值、終止值和步長值2、7和2定義切片對(duì)象。當(dāng)這個(gè)切片對(duì)象傳遞給ndarray時(shí),會(huì)對(duì)它的一部分進(jìn)行切片,從索引2到7,步長為2。通過將由冒號(hào)分隔的切片參數(shù)(start:stop:step)直接提供給ndarray對(duì)象也可以獲得相同的結(jié)果?!纠?.26】importnumpyasnpa=np.arange(10)b=importnumpyasnpa=np.arange(10)b=a[2:7:2]printb輸出如下: [246] 如果只輸入一個(gè)參數(shù),那么將返回與索引對(duì)應(yīng)的單個(gè)項(xiàng)目。如果使用a:,那么從該索引向后的所有項(xiàng)目將被提取。如果使用兩個(gè)參數(shù)(以:分隔),那么對(duì)兩個(gè)索引(不包括停止索引)之間的元素以默認(rèn)步驟進(jìn)行切片?!纠?.27】importnumpyasnpimportnumpyasnpa=np.array([[1,2,3],[3,4,5],[4,5,6]])printa#對(duì)始于索引的元素進(jìn)行切片print'現(xiàn)在我們從索引a[1:]開始對(duì)數(shù)組切片'printa[1:]輸出如下:[[12[[123][345][456]]現(xiàn)在我們從索引a[1:]開始對(duì)數(shù)組切片[[345][456]]切片還可以包括省略號(hào)(...),來使選擇元組的長度與數(shù)組的維度相同。如果在行位置使用省略號(hào),就會(huì)返回包含行中元素的ndarray。NumPy高級(jí)索引ndarray是非元組序列,數(shù)據(jù)類型為整數(shù)或布爾值的ndarray,或者至少一個(gè)元素為序列對(duì)象的元組,我們就能夠用它來索引ndarray。高級(jí)索引始終返回?cái)?shù)據(jù)的副本。與此相反,切片只提供了一個(gè)視圖。有兩種類型的高級(jí)索引:整數(shù)和布爾值。整數(shù)索引這種機(jī)制有助于基于N維索引來獲取數(shù)組中的任意元素。每個(gè)整數(shù)數(shù)組表示該維度的下標(biāo)值。當(dāng)索引的元素個(gè)數(shù)就是目標(biāo)ndarray的維度時(shí),會(huì)變得相當(dāng)直接。以下示例獲取了ndarray對(duì)象中每一行指定列的一個(gè)元素。因此,行索引包含所有行號(hào),列索引指定要選擇的元素?!纠?.28】importnumpyasnpimportnumpyasnpx=np.array([[1,2],[3,4],[5,6]])y=x[[0,1,2],[0,1,0]]printy輸出如下: [145] 該結(jié)果包括數(shù)組中(0,0)、(1,1)和(2,0)位置處的元素。下面的示例獲取了4×3數(shù)組中的每個(gè)角處的元素。行索引是[0,0]和[3,3],而列索引是[0,2]和[0,2]。【例3.29】importnumpyasnpimportnumpyasnpx=np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])print'我們的數(shù)組是:'printxprint'\n'rows=np.array([[0,0],[3,3]])cols=np.array([[0,2],[0,2]])y=x[rows,cols]print'這個(gè)數(shù)組的每個(gè)角處的元素是:'printy輸出如下:我們的數(shù)組是:我們的數(shù)組是:[[012][345][678][91011]]這個(gè)數(shù)組的每個(gè)角處的元素是:這個(gè)數(shù)組的每個(gè)角處的元素是:[[02][911]]返回的結(jié)果是包含每個(gè)角元素的ndarray對(duì)象。高級(jí)和基本索引可以通過使用切片(:)或省略號(hào)(...)與索引數(shù)組組合。以下示例使用slice作為列索引和高級(jí)索引。當(dāng)切片用于兩者時(shí),結(jié)果是相同的。但高級(jí)索引會(huì)導(dǎo)致復(fù)制,并且可能有不同的內(nèi)存布局。布爾值索引當(dāng)結(jié)果對(duì)象是布爾運(yùn)算(例如比較運(yùn)算符)的結(jié)果時(shí),將使用此類型的高級(jí)索引?!纠?.30】這個(gè)例子中,大于5的元素會(huì)作為布爾索引的結(jié)果返回。importnumpyasnpimportnumpyasnpx=np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])print'我們的數(shù)組是:'printxprint'\n'#現(xiàn)在我們會(huì)打印出大于5的元素print'大于5的元素是:'printx[x>5]輸出如下:我們的數(shù)組是:我們的數(shù)組是:[[012][345][678][91011]]大于5的元素是:[67891011]廣播廣播是指NumPy在算術(shù)運(yùn)算期間處理不同形狀的數(shù)組的能力。對(duì)數(shù)組的算術(shù)運(yùn)算通常在相應(yīng)的元素上進(jìn)行。如果兩個(gè)陣列具有完全相同的形狀,這些操作就會(huì)被無縫執(zhí)行?!纠?.31】importnumpyasnpimportnumpyasnpa=np.array([1,2,3,4])b=np.array([10,20,30,40])c=a*bprintc輸出如下: [104090160] 如果兩個(gè)數(shù)組的維數(shù)不相同,元素到元素的操作就是不可能的。然而,在NumPy中仍然可以對(duì)形狀不相似的數(shù)組進(jìn)行操作,因?yàn)樗鼡碛袕V播功能。較小的數(shù)組會(huì)廣播到較大數(shù)組的大小,以便使它們的形狀可兼容。如果滿足以下規(guī)則,就可以進(jìn)行廣播:ndim較小的數(shù)組會(huì)在前面追加一個(gè)長度為1的維度。輸出數(shù)組的每個(gè)維度的大小是輸入數(shù)組該維度大小的最大值。若輸入數(shù)組的某個(gè)維度的長度為1組值。若輸入的某個(gè)維度大小為1計(jì)算。如果上述規(guī)則產(chǎn)生有效結(jié)果,并且滿足以下條件之一,那么數(shù)組被稱為可廣播的。數(shù)組擁有相同形狀。數(shù)組擁有相同的維數(shù),每個(gè)維度擁有相同長度,或者長度為1。數(shù)組擁有極少的維度,可以在其前面追加長度為1的維度,使上述條件成立。【例3.32】importnumpyasnpimportnumpyasnpa= 30.0]])b=np.array([1.0,2.0,3.0])print'第一個(gè)數(shù)組:'printaprint'\n'print'第二個(gè)數(shù)組:'printbprint'\n'print'第一個(gè)數(shù)組加第二個(gè)數(shù)組:'printa+b輸出如下:第一個(gè)數(shù)組:第一個(gè)數(shù)組:[[0.0.0.][10.10.10.][20.20.20.][30.30.30.]]第二個(gè)數(shù)組:[1.2.3.]第一個(gè)數(shù)組加第二個(gè)數(shù)組:[[1.2.3.][[1.2.3.][11.12.13.][21.22.23.][31.32.33.]]數(shù)組與元素操作數(shù)值迭代NumPy包含一個(gè)迭代器對(duì)象numpy.nditer。它是一個(gè)有效的多維迭代器對(duì)象,可以用于在數(shù)組上進(jìn)行迭代。數(shù)組的每個(gè)元素可使用Python的標(biāo)準(zhǔn)Iterator接口來訪問?!纠?.33】使用arange()函數(shù)創(chuàng)建一個(gè)3×4數(shù)組,并使用nditer對(duì)它進(jìn)行迭代。importnumpyasnpimportnumpyasnpa=np.arange(0,60,5)a=a.reshape(3,4)print'原始數(shù)組是:'printaprint'\n'print'forxinnp.nditer(a):printx,Python輸出如下:原始數(shù)組是:原始數(shù)組是:[[051015][20253035][40455055]]修改后的數(shù)組是:0510152025303540455055【例3.34】迭代的順序匹配數(shù)組的內(nèi)容布局,而不考慮特定的排序。這可以通過迭代上述數(shù)組的轉(zhuǎn)置來看到。importnumpyasnpimportnumpyasnpa=np.arange(0,60,5)a=a.reshape(3,4)print'原始數(shù)組是:'printaprint'\n'print'b=a.Tprintbprint'\n'print'修改后的數(shù)組是:'forxinnp.nditer(b):printx,Python輸出如下:原始數(shù)組是:原始數(shù)組是:[[051015][20253035][40455055]]原始數(shù)組的轉(zhuǎn)置是:[[02040][52545][103050][153555]]修改后的數(shù)組是:0510152025303540455055【例3.35】可以通過顯式提醒來強(qiáng)制nditer對(duì)象使用某種順序。輸出如下:原始數(shù)組是:原始數(shù)組是:[[051015][20253035][40455055]]以C風(fēng)格順序排序:0510152025303540455055以F風(fēng)格順序排序:0204052545103050153555【例3.36】nditer對(duì)象有另一個(gè)可選參數(shù)op_flags,其默認(rèn)值為只讀,也可以設(shè)置為讀寫或只寫模式。這將允許使用此迭代器修改數(shù)組元素。importnumpyasnpimportnumpyasnpa=np.arange(0,60,5)a=a.reshape(3,4)print'a=a.reshape(3,4)print'原始數(shù)組是:'printaprint'\n'forxinnp.nditer(a,op_flags=['readwrite']):x[...]=2*xprint'修改后的數(shù)組是:'printa輸出如下:原始數(shù)組是:原始數(shù)組是:[[051015][20253035][40455055]]修改后的數(shù)組是:[[0102030][40506070][8090100110]]nditer類的構(gòu)造器擁有flags參數(shù),它可以接收下列值:c_index:可以跟蹤C(jī)順序的索引。f_index:可以跟蹤Fortran順序的索引。multi-index:每次迭代可以跟蹤一種索引類型。external_loop:給出的值是具有多個(gè)值的一維數(shù)組,而不是零維數(shù)組?!纠?.37】迭代器遍歷對(duì)應(yīng)于每列的一維數(shù)組。importnumpyasnpimportnumpyasnpa=np.arange(0,60,5)a=a.reshape(3,4)print'原始數(shù)組是:'printaprint'\n'print'修改后的數(shù)組是:'forxinnp.nditer(a,flags=['external_loop'],order='F'):printx,輸出如下:原始數(shù)組是:原始數(shù)組是:[[051015][20253035][40455055]]修改后的數(shù)組是:[02040][52545][103050][153555]【例3.38】如果兩個(gè)數(shù)組是可廣播的,nditer組合對(duì)象就能夠同時(shí)迭代它們。假設(shè)數(shù)組a具有維度3×4,并且存在維度為1×4的另一個(gè)數(shù)組b,則使用以下類型的迭代器(數(shù)組b被廣播到a的大小)。importnumpyasnpimportnumpyasnpa=np.arange(0,60,5)a=a.reshape(3,4)print'第一個(gè)數(shù)組:'printaprint'\n'print'第二個(gè)數(shù)組:'b=np.array([1,2,3,4],dtype=int)printbprint'\n'print'修改后的數(shù)組是:'forx,yinnp.nditer([a,b]):print"%d:%d"%(x,y),輸出如下:第一個(gè)數(shù)組:第一個(gè)數(shù)組:[[051015][20253035][40455055]]第二個(gè)數(shù)組:[1234]修改后的數(shù)組是:0:15:210:315:420:125:230:335:440:145:250:355:4數(shù)組變形NumPy包中有幾個(gè)例程用于處理ndarray對(duì)象中的元素。它們可以分為以下類型:reshape:在不改變數(shù)據(jù)的條件下修改形狀。flat:數(shù)組上的一維迭代器。flatten:返回折疊為一維的數(shù)組副本。ravel:返回連續(xù)的展開數(shù)組。語法:numpy.reshape這個(gè)函數(shù)在不改變數(shù)據(jù)的條件下修改形狀,它接收如下參數(shù):numpy.reshape(arr,newshape,order')其中:arr:要修改形狀的數(shù)組。newshape:整數(shù)或者整數(shù)數(shù)組,新的形狀應(yīng)當(dāng)兼容原有形狀。order:'C'為C風(fēng)格順序,'F'為F風(fēng)格順序,'A'為保留原順序?!纠?.39】importnumpyasnpa=np.arange(8)print'importnumpyasnpa=np.arange(8)print'原始數(shù)組:'printaprint'\n'b=a.reshape(4,2)print'修改后的數(shù)組:'printbPython輸出如下:原始數(shù)組:原始數(shù)組:[01234567]修改后的數(shù)組:[[01][23][45][67]]語法:numpy.ndarray.flat該函數(shù)返回?cái)?shù)組上的一維迭代器,行為類似Python內(nèi)建的迭代器?!纠?.40】importnumpyasnpimportnumpyasnpa=np.arange(8).reshape(2,4)print'原始數(shù)組:'printaprint'\n'print'調(diào)用flat函數(shù)之后:'#返回展開數(shù)組中的下標(biāo)的對(duì)應(yīng)元素printa.flat[5]Python輸出如下:原始數(shù)組:原始數(shù)組:[[0123][4567]]調(diào)用flat函數(shù)之后:5語法:numpy.ndarray.flatten該函數(shù)返回折疊為一維的數(shù)組副本,函數(shù)接收下列參數(shù):ndarray.flatten(order)其中:order:'C'為按行,'F'為按列,'A'為原順序,'k'為元素在內(nèi)存中出現(xiàn)的順序?!纠?.41】importnumpyasnpimportnumpyasnpa=np.arange(8).reshape(2,4)print'原數(shù)組:'printaprint'\n'#defaultiscolumn-majorprint'展開的數(shù)組:'printa.flatten()print'\n'print'以F風(fēng)格順序展開的數(shù)組:'printa.flatten(order='F')Python輸出如下:原數(shù)組:原數(shù)組:[[0123][4567]]展開的數(shù)組:[01234567]以F風(fēng)格順序展開的數(shù)組:[04152637]語法:numpy.ravel這個(gè)函數(shù)返回展開的一維數(shù)組,并且按需生成副本。返回的數(shù)組和輸入數(shù)組擁有相同數(shù)據(jù)類型。這個(gè)函數(shù)接收兩個(gè)參數(shù)。numpy.ravel(a,order)其中:a:要修改形狀的數(shù)組。order:'C'為按行,'F'為按列,'A'為原順序,'k'為元素在內(nèi)存中出現(xiàn)的順序?!纠?.42】importnumpyasnpimportnumpyasnpa=np.arange(8).reshape(2,4)print'原數(shù)組:'printaprint'\n'print'調(diào)用ravel函數(shù)之后:'printa.ravel()print'\n'printa.ravel()print'\n'print'以F風(fēng)格順序調(diào)用ravel函數(shù)之后:'printa.ravel(order='F')Python輸出如下:原數(shù)組:原數(shù)組:[[0123][4567]]調(diào)用ravel函數(shù)之后:[01234567]以F風(fēng)格順序調(diào)用ravel函數(shù)之后:[04152637]數(shù)組翻轉(zhuǎn)transpose:翻轉(zhuǎn)數(shù)組的維度。ndarray.T:與self.transpose()作用相同。rollaxis:向后滾動(dòng)指定的軸。swapaxes:互換數(shù)組的兩個(gè)軸。語法:numpy.transpose這個(gè)函數(shù)翻轉(zhuǎn)給定數(shù)組的維度。如果可能的話,它會(huì)返回一個(gè)視圖。函數(shù)接收下列參數(shù):numpy.transpose(arr,axes)其中:arr:要轉(zhuǎn)置的數(shù)組。axes:整數(shù)的列表,對(duì)應(yīng)維度,通常所有維度都會(huì)翻轉(zhuǎn)?!纠?.43】importnumpyasnpimportnumpyasnpa=np.arange(12).reshape(3,4)print'原數(shù)組:'printaprint'\n'print'轉(zhuǎn)置數(shù)組:'printnp.transpose(a)Python輸出如下:原數(shù)組:原數(shù)組:[[0123][4567][891011]]轉(zhuǎn)置數(shù)組:[[048][159][2610][3711]]語法:numpy.ndarray.T該函數(shù)屬于ndarray類,行為類似于numpy.transpose。【例3.44】importnumpyasnpimportnumpyasnpa=np.arange(12).reshape(3,4)print'原數(shù)組:'printaprint'\n'print'轉(zhuǎn)置數(shù)組:'printa.TPython輸出如下:原數(shù)組:原數(shù)組:[[0123][4567][891011]]轉(zhuǎn)置數(shù)組:[[048][159][2610][3711]]語法:numpy.rollaxis該函數(shù)向后滾動(dòng)特定的軸,直到一個(gè)特定位置。這個(gè)函數(shù)接收3個(gè)參數(shù):numpy.rollaxis(arr,axis,start)其中:arr:輸入數(shù)組。axis:要向后滾動(dòng)的軸,其他軸的相對(duì)位置不會(huì)改變。start:默認(rèn)為零,表示完整的滾動(dòng),會(huì)滾動(dòng)到特定位置?!纠?.45】##創(chuàng)建了三維的ndarrayimportnumpyasnpa=np.arange(8).reshape(2,2,2)print'原數(shù)組:'printaprint'\n'#將軸2滾動(dòng)到軸0(寬度到深度)print'調(diào)用rollaxis函數(shù):'printnp.rollaxis(a,2)#將軸0滾動(dòng)到軸1:(寬度到高度)print'\n'print'調(diào)用rollaxis函數(shù):'printnp.rollaxis(a,2,1)Python輸出如下:原數(shù)組:原數(shù)組:[[[01][23]][[45][67]]]調(diào)用rollaxis函數(shù):[[[02][46]][[13][57]]]調(diào)用rollaxis函數(shù):[[[02][13]][[46][57]]]語法:numpy.swapaxes該函數(shù)交換數(shù)組的兩個(gè)軸。對(duì)于1.10之前的NumPy版本,會(huì)返回交換后數(shù)組的視圖。這個(gè)函數(shù)接收下列參數(shù):numpy.swapaxes(arr,axis1,axis2)arr:要交換其軸的輸入數(shù)組。axis1:對(duì)應(yīng)第一個(gè)軸的整數(shù)。axis2:對(duì)應(yīng)第二個(gè)軸的整數(shù)?!纠?.46】 #創(chuàng)建了三維的ndarray importnumpyasnpimportnumpyasnpa=np.arange(8).reshape(2,2,2)print'原數(shù)組:'printaprint'\n'#現(xiàn)在交換軸0(深度方向)到軸2(寬度方向)print'調(diào)用swapaxes函數(shù)后的數(shù)組:'printnp.swapaxes(a,2,0)Python輸出如下:原數(shù)組:原數(shù)組:[[[01][23]][[45][67]]]調(diào)用swapaxes函數(shù)后的數(shù)組:[[[04][26]][[15][37]]]修改維度broadcast:產(chǎn)生模仿廣播的對(duì)象。broadcast_to:將數(shù)組廣播到新形狀。expand_dims:擴(kuò)展數(shù)組的形狀。squeeze:從數(shù)組的形狀中刪除單維條目。語法:broadcast如前所述,NumPy已經(jīng)內(nèi)置了對(duì)廣播的支持。此功能模仿廣播機(jī)制。它返回一個(gè)對(duì)象,該對(duì)象封裝了將一個(gè)數(shù)組廣播到另一個(gè)數(shù)組的結(jié)果。該函數(shù)使用兩個(gè)數(shù)組作為輸入?yún)?shù):numpy.broadcast(x,y)下面的例子說明了它的用法?!纠?.47】importnumpyasnpimportnumpyasnpx=np.array([[1],[2],[3]])y=np.array([4,5,6])#對(duì)y廣播xb=np.broadcast(x,y)b=np.broadcast(x,y)#它擁有iterator屬性,基于自身組件的迭代器元組print'對(duì)y廣播x:'r,c=b.itersprintr.next(),c.next()printr.next(),c.next()print'\n'#shape屬性返回廣播對(duì)象的形狀print'廣播對(duì)象的形狀:'printb.shapeprint'\n'#手動(dòng)使用broadcast將x與y相加b=np.broadcast(x,y)c=np.empty(b.shape)print'手動(dòng)使用broadcast將x與y相加:'printc.shapeprint'\n'c.flat=[u+vfor(u,v)inb]print'調(diào)用flat函數(shù):'printcprint'\n'#獲得了和NumPy內(nèi)建的廣播支持相同的結(jié)果print'x與y的和:'printx+yPython輸出如下:對(duì)對(duì)y廣播x:1415廣播對(duì)象的形狀:(3,3)手動(dòng)使用broadcast將x與y相加:(3,3)調(diào)用flat函數(shù):[[5.6.7.][6.7.8.][7.8.9.]]x與y的和:[[567][678][789]]語法:numpy.broadcast_to此函數(shù)將數(shù)組廣播到新形狀。它在原始數(shù)組上返回只讀視圖,通常不連續(xù)。如果新形狀不符合NumPy的廣播規(guī)則,該函數(shù)就可能會(huì)拋出ValueError。該函數(shù)接收以下參數(shù):numpy.broadcast_to(array,shape,subok)【例3.48】importnumpyasnpimportnumpyasnpa=np.arange(4).reshape(1,4)print'原數(shù)組:'printaprint'\n'print'調(diào)用broadcast_to函數(shù)之后:'printnp.broadcast_to(a,(4,4))Python輸出如下:[[012[[0123][0123][0123][0123]]語法:numpy.expand_dims函數(shù)通過在指定位置插入新的軸來擴(kuò)展數(shù)組形狀。該函數(shù)需要兩個(gè)參數(shù):numpy.expand_dims(arr,axis)其中:arr:輸入數(shù)組。axis:新軸插入的位置。【例3.49】importnumpyasnpimportnumpyasnpx=np.array(([1,2],[3,4]))print'數(shù)組x:'printxprint'\n'y=np.expand_dims(x,axis=0)print'數(shù)組y:'printyprint'\n'print'數(shù)組x和yprintx.shape,y.shapeprint'\n'#在位置1插入軸y=np.expand_dims(x,axis=1)print'在位置1插入軸之后的數(shù)組y:'printyprint'\n'print'\n'print'x.ndim和y.ndim:'printx.ndim,y.ndimprint'\n'print'x.shape和y.shape:'printx.shape,y.shapePython輸出如下:數(shù)組數(shù)組x:[[12][34]]數(shù)組[[[1[34]]]數(shù)組x和y的形狀:(2,2)(1,2,2)在位置1插入軸之后的數(shù)組y:[[[12]][[34]]]x.ndim和y.ndim:23x.shape和y.shape:(2,2)(2,1,2)語法:numpy.squeeze函數(shù)從給定數(shù)組的形狀中刪除一維條目。此函數(shù)需要兩個(gè)參數(shù):numpy.squeeze(arr,axis)其中:arr:輸入數(shù)組。axis:整數(shù)或整數(shù)元組,用于選擇形狀中單一維度條目的子集?!纠?.50】importnumpyasnpimportnumpyasnpx=np.arange(9).reshape(1,3,3)print'數(shù)組x:'printxprint'\n'y=np.squeeze(x)print'數(shù)組y:'printyprint'\n'print'\n'print'數(shù)組x和y的形狀:'printx.shape,y.shapePython輸出如下:數(shù)組數(shù)組x:[[[012][345][678]]]數(shù)組y:[[01[345][678]]數(shù)組x和y的形狀:(1,3,3)(3,3)數(shù)組連接concatenate:沿著現(xiàn)存的軸連接數(shù)據(jù)序列。stack:沿著新軸連接數(shù)組序列。hstack:水平堆疊序列中的數(shù)組(列方向)。vstack:豎直堆疊序列中的數(shù)組(行方向)。語法:numpy.concatenate連接沿現(xiàn)有軸的數(shù)組序列。此函數(shù)用于沿指定軸連接相同形狀的兩個(gè)或多個(gè)數(shù)組。該函數(shù)接收以下參數(shù):numpy.concatenate((a1,a2,...),axis)其中:a1,a2,...:相同類型的數(shù)組序列。axis:沿著它連接數(shù)組的軸,默認(rèn)為0?!纠?.51】importnumpyasnpimportnumpyasnpa=np.array([[1,2],[3,4]])print'第一個(gè)數(shù)組:'printaprint'\n'b=np.array([[5,6],[7,8]])print'第二個(gè)數(shù)組:'printbprint'\n'print'\n'#兩個(gè)數(shù)組的維度相同print'沿軸0連接兩個(gè)數(shù)組:'printnp.concatenate((a,b))print'\n'print'沿軸1連接兩個(gè)數(shù)組:'printnp.concatenate((a,b),axis=1)Python輸出如下:第一個(gè)數(shù)組:第一個(gè)數(shù)組:[[12][34]]第二個(gè)數(shù)組:[[56][78]]沿軸0連接兩個(gè)數(shù)組:[[12][34][56][78]]沿軸1連接兩個(gè)數(shù)組:[[1256][3478]]語法:numpy.stack此函數(shù)沿新軸連接數(shù)組序列。此功能添加自NumPy版本1.10.0。需要提供以下參數(shù):numpy.stack(arrays,axis)其中:arrays:相同形狀的數(shù)組序列。axis:返回?cái)?shù)組中的軸,輸入數(shù)組沿著它來堆疊?!纠?.52】importnumpyasnpimportnumpyasnpa=np.array([[1,2],[3,4]])print'第一個(gè)數(shù)組:'printaprint'\n'b=np.array([[5,6],[7,8]])print'第二個(gè)數(shù)組:'printbprint'\n'print'print'沿軸0堆疊兩個(gè)數(shù)組:'printnp.stack((a,b),0)print'\n'print'沿軸1堆疊兩個(gè)數(shù)組:'printnp.stack((a,b),1)Python輸出如下:第一個(gè)數(shù)組:第一個(gè)數(shù)組:[[12][34]]第二個(gè)數(shù)組:[[56][78]]沿軸0堆疊兩個(gè)數(shù)組:[[[12][34]][[56][78]]]沿軸1堆疊兩個(gè)數(shù)組:[[[12][56]][[34][78]]]語法:numpy.hstacknumpy.stack函數(shù)的變體,通過堆疊來生成水平的單個(gè)數(shù)組?!纠?.53】importnumpyasnpimportnumpyasnpa=np.array([[1,2],[3,4]])print'第一個(gè)數(shù)組:'printaprint'\n'b=np.array([[5,6],[7,8]])print'第二個(gè)數(shù)組:'printbprint'\n'print'水平堆疊:'c=np.hstack((a,b))printcprint'\n'Python輸出如下:[[12][34]]第二個(gè)數(shù)組:第二個(gè)數(shù)組:[[56][78]]水平堆疊:[[1256][3478]]語法:numpy.vstacknumpy.stack函數(shù)的變體,通過堆疊來生成豎直的單個(gè)數(shù)組。【例3.54】importnumpyasnpimportnumpyasnpa=np.array([[1,2],[3,4]])print'第一個(gè)數(shù)組:'printaprint'\n'b=np.array([[5,6],[7,8]])print'第二個(gè)數(shù)組:'printbprint'\n'print'豎直堆疊:'c=np.vstack((a,b))printcPython輸出如下:第一個(gè)數(shù)組:第一個(gè)數(shù)組:[[12][34]]第二個(gè)數(shù)組:[[56][78]]豎直堆疊:[[12][34][56][78]]數(shù)組分割split:將一個(gè)數(shù)組分割為多個(gè)子數(shù)組。hsplit:將一個(gè)數(shù)組水平分割為多個(gè)子數(shù)組(按列)。vsplit:將一個(gè)數(shù)組豎直分割為多個(gè)子數(shù)組(按行)。語法:numpy.split該函數(shù)沿特定的軸將數(shù)組分割為子數(shù)組。該函數(shù)接收3個(gè)參數(shù):numpy.split(ary,indices_or_sections,axis)其中:ary:被分割的輸入數(shù)組。indices_or_sections:可以是整數(shù),表明要從輸入數(shù)組創(chuàng)建的等大小的子數(shù)組的數(shù)量。若此參數(shù)是一維數(shù)組,則其元素表明要?jiǎng)?chuàng)建的新子數(shù)組的點(diǎn)。axis:默認(rèn)為0?!纠?.55】importnumpyasnpa=np.arange(9)importnumpyasnpa=np.arange(9)print'第一個(gè)數(shù)組:'printaprint'\n'print'將數(shù)組分為三個(gè)大小相等的子數(shù)組:'b=np.split(a,3)printbprint'\n'print'將數(shù)組在一維數(shù)組中表明的位置分割:'b=np.split(a,[4,7])printbPython輸出如下:第一個(gè)數(shù)組:第一個(gè)數(shù)組:[012345678]將數(shù)組分為三個(gè)大小相等的子數(shù)組:[array([0,1,2]),array([3,4,5]),array([6,7,8])]將數(shù)組在一維數(shù)組中表明的位置分割:[array([0,1,2,3]),array([4,5,6]),array([7,8])]語法:numpy.hsplitnumpy.hsplit是split()函數(shù)的特例,其中軸為1表示水平分割,無論輸入數(shù)組的維度是什么?!纠?.56】importnumpyasnpimportnumpyasnpa=np.arange(16).reshape(4,4)print'print'第一個(gè)數(shù)組:'printaprint'\n'print'水平分割:'b=np.hsplit(a,2)printbprint'\n'Python輸出:語法:numpy.vsplitnumpy.vsplit是split()函數(shù)的特例,其中軸為0表示豎直分割,無論輸入數(shù)組的維度是什么?!纠?.57】importnumpyasnpimportnumpyasnpa=np.arange(16).reshape(4,4)print'第一個(gè)數(shù)組:'printaprint'\n'print'豎直分割:'b=np.vsplit(a,2)printbPython輸出如下:添加/刪除元素resize:返回指定形狀的新數(shù)組。append:將值添加到數(shù)組末尾。insert:沿指定軸將值插入指定下標(biāo)之前。delete:返回刪掉某個(gè)軸的子數(shù)組的新數(shù)組。unique:尋找數(shù)組內(nèi)的唯一元素。語法:numpy.resize該函數(shù)返回指定大小的新數(shù)組。如果新大小大于原始大小,就包含原始數(shù)組中的元素的重復(fù)副本。該函數(shù)接收以下參數(shù):numpy.resize(arr,shape)其中:arr:要修改大小的輸入數(shù)組。shape:返回?cái)?shù)組的新形狀。【例3.58】importnumpyasnpimportnumpyasnpa=np.array([[1,2,3],[4,5,6]])print'第一個(gè)數(shù)組:'printaprint'\n'print'第一個(gè)數(shù)組的形狀:'printa.shapeprint'\n'b=np.resize(a,(3,2))print'第二個(gè)數(shù)組:'printbprint'\n'print'print'第二個(gè)數(shù)組的形狀:'printb.shapeprint'\n'#要注意a的第一行在b中重復(fù)出現(xiàn),因?yàn)槌叽缱兇罅藀rint'修改第二個(gè)數(shù)組的大?。?b=np.resize(a,(3,3))printbPython輸出如下:第一個(gè)數(shù)組:第一個(gè)數(shù)組:[[123][456]]第一個(gè)數(shù)組的形狀:(2,3)第二個(gè)數(shù)組:[[12][34][56]]第二個(gè)數(shù)組的形狀:(3,2)修改第二個(gè)數(shù)組的大?。篬[123][456][123]]語法:numpy.append該函數(shù)在輸入數(shù)組的末尾添加值。附加操作不是原地的,而是分配新的數(shù)組。此外,輸入數(shù)組的維度必須匹配否則將生成ValueError。函數(shù)接收下列函數(shù):numpy.append(arr,values,axis)其中:arr:輸入數(shù)組。values:要向arr添加的值,比如和arr形狀相同(除了要添加的軸外)。axis:沿著它完成操作的軸。如果沒有提供,那么兩個(gè)參數(shù)都會(huì)被展開?!纠?.59】importnumpyasnpimportnumpyasnpa=np.array([[1,2,3],[4,5,6]])print'第一個(gè)數(shù)組:'printaprint'\n'print'向數(shù)組添加元素:'printnp.append(a,[7,8,9])print'\n'printnp.append(a,[7,8,9])print'\n'print'沿軸0添加元素:'printnp.append(a,[[7,8,9]],axis=0)print'\n'print'沿軸1添加元素:'printnp.append(a,[[5,5,5],[7,8,9]],axis=1)Python輸出如下:第一個(gè)數(shù)組:第一個(gè)數(shù)組:[[123][456]]向數(shù)組添加元素:[123456789]沿軸0添加元素:[[123][456][789]]沿軸1添加元素:[[123555][456789]]語法:numpy.insert型,則它與輸入數(shù)組不同。插入沒有原地的,函數(shù)會(huì)返回一個(gè)新數(shù)組。此外,若未提供軸,則輸入數(shù)組會(huì)被展開。該函數(shù)接收以下參數(shù):numpy.insert(arr,obj,values,axis)其中:arr:輸入數(shù)組。obj:在其之前插入值的索引。values:要插入的值。axis:沿著它插入的軸,如果未提供,輸入數(shù)組就會(huì)被展開。語法:numpy.delete該函數(shù)返回從輸入數(shù)組中刪除指定子數(shù)組的新數(shù)組。與insert()函數(shù)的情況一樣,若未提供軸參數(shù),則輸入數(shù)組將展開。該函數(shù)接收以下參數(shù):NumPy.delete(arr,obj,axis)其中:arr:輸入數(shù)組。obj:可以被切片,整數(shù)或者整數(shù)數(shù)組,表明要從輸入數(shù)組刪除的子數(shù)組。axis:沿著它刪除給定子數(shù)組的軸,若未提供,則輸入數(shù)組會(huì)被展開?!纠?.60】importnumpyasnpimportnumpyasnpa=np.arange(12).reshape(3,4)print'第一個(gè)數(shù)組:'printaprint'\n'print'未傳遞Axis參數(shù)。在插入之前輸入數(shù)組會(huì)被展開。'printnp.delete(a,5)print'\n'print'刪除第二列:'printnp.delete(a,1,axis=1)print'\n'print'包含從數(shù)組中刪除的替代值的切片:'a=np.array([1,2,3,4,5,6,7,8,9,10])printnp.delete(a,np.s_[::2])Python輸出如下:第一個(gè)數(shù)組:第一個(gè)數(shù)組:[[0123][4567][891011]]未傳遞Axis參數(shù)。在插入之前輸入數(shù)組會(huì)被展開。[0123467891011]刪除第二列:[[023][467][81011]]包含從數(shù)組中刪除的替代值的切片:[246810]語法:numpy.unique該函數(shù)返回輸入數(shù)組中的去重元素?cái)?shù)組。該函數(shù)能夠返回一個(gè)元組,包含去重?cái)?shù)組和相關(guān)索引的數(shù)組。索引的性質(zhì)取決于函數(shù)調(diào)用中返回參數(shù)的類型。該函數(shù)接收以下參數(shù):numpy.unique(arr,return_index,return_inverse,return_counts)其中:arr:輸入數(shù)組。如果不是一維數(shù)組,就會(huì)展開。return_index:如果為true,就返回輸入數(shù)組中的元素下標(biāo)。return_inverse:如果為true,就返回去重?cái)?shù)組的下標(biāo),可以用于重構(gòu)輸入數(shù)組。return_counts:如果為true,就返回去重?cái)?shù)組中的元素在原數(shù)組中出現(xiàn)的次數(shù)。【例3.61】importnumpyasnpimportnumpyasnpa=np.array([5,2,6,2,7,5,6,8,2,9])print'第一個(gè)數(shù)組:'printaprint'\n'print'第一個(gè)數(shù)組的去重值:'u=np.unique(a)printuprint'\n'print'去重?cái)?shù)組的索引數(shù)組:'u,indices=np.unique(a,return_index=True)printindicesprint'\n'print'我們可以看到每個(gè)和原數(shù)組下標(biāo)對(duì)應(yīng)的數(shù)值:'printaprint'\n'print'去重?cái)?shù)組的下標(biāo):'u,indices=np.unique(a,return_inverse=True)printuprint'\n'print'printindicesprint'\n'print'使用下標(biāo)重構(gòu)原數(shù)組:'printu[indices]print'\n'print'返回去重元素的重復(fù)數(shù)量:'u,indices=np.unique(a,return_counts=True)printuprintindicesPython輸出如下:第一個(gè)數(shù)組:第一個(gè)數(shù)組:[5262756829]第一個(gè)數(shù)組的去重值:[256789]去重?cái)?shù)組的索引數(shù)組:[102479]我們可以看到每個(gè)和原數(shù)組下標(biāo)對(duì)應(yīng)的數(shù)值:我們可以看到每個(gè)和原數(shù)組下標(biāo)對(duì)應(yīng)的數(shù)值:返回唯一元素的重復(fù)數(shù)量:[256789][322111][526275682去重?cái)?shù)組的下標(biāo):9][256789]下標(biāo)為:[1020312405]使用下標(biāo)重構(gòu)原數(shù)組:[5262756829]位操作與字符串函數(shù)位操作下面是NumPy包中可用的位操作函數(shù)。bitwise_and:對(duì)數(shù)組元素執(zhí)行位與操作。bitwise_or:對(duì)數(shù)組元素執(zhí)行位或操作。invert
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中級(jí)養(yǎng)老護(hù)理復(fù)習(xí)測試卷含答案(二)
- 企業(yè)內(nèi)部辦公自動(dòng)化系統(tǒng)的設(shè)計(jì)與實(shí)施
- 鄉(xiāng)村規(guī)劃設(shè)計(jì)與旅游產(chǎn)業(yè)開發(fā)作業(yè)指導(dǎo)書
- 攝影行業(yè)圖像處理與后期制作系統(tǒng)優(yōu)化方案
- 三農(nóng)產(chǎn)品市場監(jiān)管與安全風(fēng)險(xiǎn)評(píng)估手冊
- 《稻草人》選擇題后附答案
- 法律服務(wù)行業(yè)實(shí)戰(zhàn)指南
- 環(huán)境治理與可持續(xù)發(fā)展技術(shù)報(bào)告
- 平滑切換基礎(chǔ)入門
- 臨床護(hù)理帶教老師述職報(bào)告
- 河南省勞動(dòng)關(guān)系協(xié)調(diào)員職業(yè)技能大賽技術(shù)工作文件
- 成都實(shí)驗(yàn)中學(xué)2025屆高三最后一模英語試題含解析
- 2024年新《反洗錢法》修訂要點(diǎn)解讀
- 如何變廢為寶課件
- 隧道危險(xiǎn)源清單
- 中華人民共和國學(xué)前教育法
- 辯論英文課件教學(xué)課件
- 2023屆江蘇省南通市高考一模地理試題(解析版)
- 我國藥械組合產(chǎn)品基本情況及屬性界定、注冊申報(bào)流程介紹
- 制定業(yè)務(wù)拓展的具體方案計(jì)劃
- 二年級(jí)下冊脫式計(jì)算題100道及答案
評(píng)論
0/150
提交評(píng)論