Numpy包是一個(gè)用于科學(xué)計(jì)算的第三方python包,使用Numpy包可以實(shí)現(xiàn)Python幾乎所有的數(shù)據(jù)操作,此外有些更新的工具包(如pandas等)都是圍繞NumPy數(shù)組構(gòu)建的。本節(jié)將提供一些使用NumPy數(shù)組操作來(lái)訪問(wèn)數(shù)據(jù)和子數(shù)組,以及分割、重新塑造和連接數(shù)組的示例。 首先是調(diào)用Numpy包及查看版本 import numpy numpy.__version__ 另外常用簡(jiǎn)寫命令調(diào)用 import numpy as np 一、構(gòu)建數(shù)組1.1 從python列表中創(chuàng)建數(shù)組與python list不同,Numpy要求數(shù)組中的數(shù)據(jù)格式必須保持一致,否則將會(huì)自動(dòng)轉(zhuǎn)換。下面是一些例子 np.array([3.14, 4, 2, 3]) out: array([ 3.14, 4. , 2. , 3. ]) np.array([1,'2',3,4]) out: array(['1', '2', '3', '4'], dtype='<U21') 可以通過(guò)dtype定義 np.array([1, 2, 3, 4], dtype='float32') 另外,不同于python list,Numpy數(shù)組可以是多維數(shù)據(jù)。 1.1 Numpy常用命令創(chuàng)建數(shù)組np.zeros() 創(chuàng)建含0數(shù)組 np.ones() 創(chuàng)建 含1數(shù)組 np.full() 創(chuàng)建包含同樣元素的數(shù)組 np.arange()及np.linspace()構(gòu)建等差數(shù)列的數(shù)組 np.random.random() 、np.random.normal()、np.random.randint()創(chuàng)建由隨機(jī)數(shù)構(gòu)成數(shù)組。 NumPy標(biāo)準(zhǔn)數(shù)據(jù)類型 二、Numpy數(shù)組基礎(chǔ)操作基礎(chǔ)的數(shù)組操作包括:
2.1 數(shù)組常見屬性
其他常見屬性還包含
2.2 數(shù)組索引--訪問(wèn)數(shù)組元素針對(duì)多維數(shù)組 可以通過(guò)數(shù)組索引改變?cè)刂?,要注意修改后的?shù)據(jù)屬性要與原數(shù)據(jù)保持一致,否則會(huì)報(bào)錯(cuò)或數(shù)據(jù)自動(dòng)調(diào)整至與原數(shù)組元素屬性一致。 2.3 數(shù)組切片--訪問(wèn)子數(shù)組運(yùn)行模式:x[start:stop:step] 一維數(shù)組 多維數(shù)組 直接賦值給新數(shù)組 x=y, 改變其中一個(gè)數(shù)組的元素,另一個(gè)數(shù)組也會(huì)相應(yīng)進(jìn)行變化。用x=y.copy(),改變一個(gè)數(shù)組元素不會(huì)引起另一個(gè)數(shù)組的變化。 2.4 數(shù)組重構(gòu)數(shù)據(jù)重構(gòu)可通過(guò)reshape命令實(shí)現(xiàn),具體參照如下示例: 2.5 數(shù)組合并及拆分2.5.1數(shù)組合并常用函數(shù)
np.vstack()、np.hstack()、np.dstack() 2.5.2 數(shù)組拆分常用函數(shù)
如上面示例,split會(huì)依據(jù)所給的N個(gè)分割點(diǎn),產(chǎn)生N+1個(gè)子數(shù)組。np.hsplit、np.vsplit使用方法類似,np.hsplit案列進(jìn)行切割,np.vsplit暗行進(jìn)行切割。 三、Numpy函數(shù)3.1 常用算數(shù)函數(shù)如下表格中列出了一些常用的算術(shù)函數(shù) 求絕對(duì)值:np.absolute() or np.abs() 求對(duì)數(shù)計(jì)算:np.log()、np.log2()、np.log10() 下文中以一些例子來(lái)說(shuō)明這些函數(shù)的使用 1)指數(shù)計(jì)算 2)對(duì)數(shù)計(jì)算 3.2 三角函數(shù)3.3 總計(jì)(Aggregations)1)reduce方法 reduce方法對(duì)數(shù)組的元素進(jìn)行給定的重復(fù)操作,直到得到一個(gè)結(jié)果。 上圖中例子分別實(shí)現(xiàn)x中元素累加或累乘。 2) accumulate方法 accumulate方法與reduce方法類似,但可以保留每個(gè)中間結(jié)果。 *以上方法的替代函數(shù): 3)其他常用統(tǒng)計(jì)函數(shù) 四、Numpy Broadcasting廣播(Broadcast)是 numpy 對(duì)不同形狀(shape)的數(shù)組進(jìn)行數(shù)值計(jì)算的方式, 對(duì)數(shù)組的算術(shù)運(yùn)算通常在相應(yīng)的元素上進(jìn)行。如果計(jì)算中的兩個(gè)數(shù)組 a 和 b 形狀相同,那么 a*b 的結(jié)果就是 a 與 b 數(shù)組對(duì)應(yīng)位相乘。這要求維數(shù)相同,且各維度的長(zhǎng)度相同。如果2 個(gè)數(shù)組的形狀不同時(shí),numpy 將自動(dòng)觸發(fā)廣播機(jī)制。下面是幾個(gè)例子: 例1) 例2) 例3) 以上示例的圖示原理如下: 根據(jù)以上例子,我們可以總結(jié)出Numpy 廣播所遵循的規(guī)則如下:
六、Numpy 比較與布爾邏輯6.1 比較操作符第四部分中我們介紹了Numpy常用的加減計(jì)算。除了常規(guī)的算術(shù)運(yùn)算外,Numpy同時(shí)還能實(shí)現(xiàn)比較操作,如<(小于)和>(大于)等,這些比較運(yùn)算通常會(huì)得到是一個(gè)布爾數(shù)據(jù)類型的數(shù)組。 常用的6項(xiàng)比較操作符如下: 下面是一個(gè)二維數(shù)組運(yùn)算示例 6.2 布爾數(shù)組操作6.2.1 統(tǒng)計(jì)布爾數(shù)組中真值
還可以按照行或列進(jìn)行統(tǒng)計(jì)
6.2.2 布爾數(shù)組操作6.2.3 布爾數(shù)組作為掩碼可以使用布爾數(shù)組作為掩碼,來(lái)篩選數(shù)據(jù)本身的特定子集。masking操作返回的是一個(gè)一維數(shù)組,其中包含滿足此條件的所有值,換句話說(shuō),掩碼數(shù)組包含True的位置上的所有值。示例如下: 6.2.4 and /or與&/| 的區(qū)別有一個(gè)比較容易混淆的點(diǎn)是and和or與操作符&和|之間的區(qū)別,兩類的區(qū)別在于and和or對(duì)整個(gè)對(duì)象執(zhí)行一個(gè)布爾值計(jì)算,而&和|對(duì)對(duì)象的內(nèi)容(單個(gè)位或字節(jié))執(zhí)行多個(gè)布爾值計(jì)算。 類似地,當(dāng)對(duì)給定數(shù)組執(zhí)行布爾表達(dá)式時(shí),應(yīng)該使用| 或 &而不是or或 and。 七、復(fù)雜索引(Fancy Indexing)7.1 復(fù)雜索引介紹復(fù)雜索引的概念很簡(jiǎn)單:它意味著利用索引數(shù)組來(lái)同時(shí)訪問(wèn)多個(gè)數(shù)組元素。花式索引根據(jù)索引數(shù)組的值作為目標(biāo)數(shù)組的某個(gè)軸的下標(biāo)來(lái)取值。對(duì)于使用一維整型數(shù)組作為索引,如果目標(biāo)是一維數(shù)組,那么索引的結(jié)果就是對(duì)應(yīng)位置的元素;如果目標(biāo)是二維數(shù)組,那么就是對(duì)應(yīng)下標(biāo)的行,如下圖示例。 7.2 組合索引我們還可以將花式索引與切片結(jié)合起來(lái)使用 7.3 利用花式索引改變數(shù)值八、數(shù)組排序8.1 利用np.sort 及 np.argsort進(jìn)行快速排序Numpy 數(shù)據(jù)排序常用兩個(gè)函數(shù):np.sort & np.argsort。np.sort可在不修改輸入的情況下返回?cái)?shù)組的排序結(jié)果。 如果你希望直接對(duì)數(shù)組進(jìn)行排序,可以使用sort方法: 此外argsort反饋排序后的index值,如下示例: 8.2 按照行/列進(jìn)行數(shù)組排序按列對(duì)數(shù)組進(jìn)行排序 按行對(duì)數(shù)組進(jìn)行排序 8.3 部分排序np.partition輸入為數(shù)組及k(元素?cái)?shù)目),會(huì)將最小的k個(gè)元素放在數(shù)組左側(cè),其余元素放在另一側(cè)。如下示例: 參考資料: 1.Python Data Science Handbook 2.NumPy 教程 |
|
來(lái)自: 生物_醫(yī)藥_科研 > 《待分類》