NumPy是Numerical Python的簡(jiǎn)稱,是Python的支持矢量運(yùn)算的面向N維數(shù)組的一個(gè)運(yùn)算庫(kù),目前在機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)領(lǐng)域被廣泛使用,并且當(dāng)前許多支持科學(xué)計(jì)算的工具包都是基于NumPy開(kāi)發(fā)的,例如pandas,,scikit-learn,TensorFlow等。
NumPy最大的特點(diǎn)是其對(duì)象ndarray,其存儲(chǔ)形式是N維的數(shù)組,我們可以將NumPy的1維數(shù)據(jù)看成是向量,多維數(shù)據(jù)看成是矩陣,可以把NumPy的計(jì)算看成是向量或矩陣運(yùn)算,這點(diǎn)跟MATLAB特別相似。
說(shuō)到數(shù)組,或許你可能有疑問(wèn)了,Python本身就包含列表(list)和數(shù)組(array),為什么我們非要用NumPy而不用常規(guī)的Python數(shù)組呢?這主要是因?yàn)镹umPy的算法庫(kù)都是由C語(yǔ)言編寫,可以直接操作內(nèi)存,所以極大的提高了運(yùn)行效率,一般基于NumPy的算法要比純Python快10-100倍,并且占用的內(nèi)存更少,可以說(shuō)是既快又省。
基于NumPy的數(shù)據(jù)結(jié)構(gòu)特點(diǎn),本文主要從NumPy的一維數(shù)組(可以理解為向量)和多維數(shù)組(可以理解為矩陣)2個(gè)方面進(jìn)行介紹,以便于大家系統(tǒng)性的學(xué)習(xí)NumPy。
最基本的方式是利用NumPy的array()函數(shù)通過(guò)列表創(chuàng)建數(shù)組。
在實(shí)際應(yīng)用中,我們經(jīng)常會(huì)用到一些已經(jīng)初始化的數(shù)組,比如全0數(shù)組、全1數(shù)組、隨機(jī)數(shù)組等等。NumPy也提供了相應(yīng)的函數(shù)zeros()、ones()、random()等函數(shù)。
NumPy對(duì)于長(zhǎng)度相等的一維數(shù)組的運(yùn)算都會(huì)將運(yùn)算應(yīng)用到元素級(jí),事實(shí)上就是向量的縮放、向量的加減法,需要注意的是兩個(gè)數(shù)組相乘跟點(diǎn)積是不一樣的。
NumPy對(duì)于一維數(shù)組的索引與Python中列表的索引沒(méi)什么區(qū)別。
NumPy中ndarray是一個(gè)對(duì)象,提供了許多聚合方法用于對(duì)象的操作,例如求最大值、最小值、均值等等。
同一維數(shù)組類似,矩陣的創(chuàng)建既可以通過(guò)基本的列表操作實(shí)現(xiàn),也可以用上面提到的初始化函數(shù)zeros()、ones()、random()等函數(shù),只不過(guò)需要相應(yīng)的增加維度。
NumPy中矩陣的加減運(yùn)算同樣將行列數(shù)相等的矩陣應(yīng)用到元素級(jí),NumPy有個(gè)很好的功能叫廣播(broadcast ),既對(duì)于行列數(shù)不同的矩陣,只要有一個(gè)矩陣的行數(shù)或列數(shù)與另一個(gè)矩陣一致,并且是一個(gè)一維矩陣,那么2個(gè)矩陣在作運(yùn)算時(shí),NumPy會(huì)自動(dòng)把那個(gè)一維矩陣補(bǔ)充成完整的多維矩陣。
NumPy提供了矩陣之間的點(diǎn)積運(yùn)行函數(shù)dot(),可以直接計(jì)算矩陣的點(diǎn)積。
同樣的,矩陣的索引和切片與Python中2維數(shù)組類似,第一個(gè)維度對(duì)應(yīng)于行,第二個(gè)維度對(duì)應(yīng)于列,取多個(gè)元素可以用“:”。
矩陣同樣支持聚合操作,除了對(duì)所有值進(jìn)行聚合,NumPy還支持對(duì)特定的軸進(jìn)行聚合,axis=0(既0軸)表示對(duì)橫軸進(jìn)行操作,在計(jì)算上是沿著橫軸方向一列一列計(jì)算;axis=1(既1軸)表示對(duì)縱軸進(jìn)行操作,在計(jì)算上是沿著縱軸方向一行一行計(jì)算。
在線性代數(shù)中常常用到舉證的變換,例如矩陣轉(zhuǎn)置、矩陣重塑。NumPy提供了.T屬性用于矩陣的轉(zhuǎn)置,reshape()函數(shù)用于矩陣的重塑。
NumPy在Python線性代數(shù)的運(yùn)算中提供了非常好的數(shù)據(jù)結(jié)構(gòu),其ndarray對(duì)象擁有許多方便的方法和屬性,并且其良好的運(yùn)算性能也是純Python不能替代的,所以在機(jī)器學(xué)習(xí)中NumPy是非常強(qiáng)大的存在,學(xué)好NumPy是機(jī)器學(xué)習(xí)實(shí)現(xiàn)各種算法的基礎(chǔ)。
聯(lián)系客服