W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
NumPy 是 Python 科學(xué)計(jì)算的基礎(chǔ)包。它是一個(gè) Python 庫(kù),提供了一個(gè)多維數(shù)組對(duì)象、各種派生對(duì)象(例如掩碼數(shù)組和矩陣),以及用于對(duì)數(shù)組進(jìn)行快速操作的各種例程,包括數(shù)學(xué)、邏輯、形狀操作、排序、選擇、I/O 、離散傅立葉變換、基本線性代數(shù)、基本統(tǒng)計(jì)運(yùn)算、隨機(jī)模擬等等。
NumPy 包的核心是 ndarray 對(duì)象。其封裝了同構(gòu)數(shù)據(jù)類(lèi)型的 n維數(shù)組,許多操作在編譯代碼中執(zhí)行以提高性能。NumPy 數(shù)組和標(biāo)準(zhǔn) Python 序列之間有幾個(gè)重要的區(qū)別:
關(guān)于序列大小和速度的要點(diǎn)在科學(xué)計(jì)算中尤為重要。作為一個(gè)簡(jiǎn)單的例子,考慮將一維序列中的每個(gè)元素與另一個(gè)相同長(zhǎng)度序列中的相應(yīng)元素相乘的情況。如果數(shù)據(jù)存儲(chǔ)在兩個(gè) Python 列表a
和 中b
,我們可以遍歷每個(gè)元素:
c = []
for i in range(len(a)):
c.append(a[i]*b[i])
得出了正確的答案,但如果a
和b
每一個(gè)都包含數(shù)以百萬(wàn)計(jì)的數(shù)字,我們會(huì)因?yàn)?Python 中循環(huán)的的低效率而付出代價(jià)。我們可以在 C 中通過(guò)編寫(xiě)代碼更快地完成相同的任務(wù)(為清楚起見(jiàn),我們忽略了變量聲明和初始化、內(nèi)存分配等):
for (i = 0; i < rows; i++): {
c[i] = a[i]*b[i];
}
節(jié)省了解釋 Python 代碼和操作 Python 對(duì)象所涉及的所有開(kāi)銷(xiāo),但代價(jià)是犧牲了使用 Python 編碼所帶來(lái)的好處。此外,所需的編碼工作隨著數(shù)據(jù)維度的增加而增加。例如,在二維數(shù)組的情況下,C 代碼(如前所述縮寫(xiě))擴(kuò)展為:
for (i = 0; i < rows; i++): {
for (j = 0; j < columns; j++): {
c[i][j] = a[i][j]*b[i][j];
}
}
NumPy 為我們提供了兩全其美的方法:當(dāng)涉及 ndarray 時(shí),逐元素操作是“默認(rèn)模式”,但逐元素操作由預(yù)編譯的 C 代碼快速執(zhí)行。 在 NumPy 中:
c = a * b
以接近 C 的速度執(zhí)行前面的示例所做的事情,而且代碼的簡(jiǎn)單性又符合我們希望和 Python 一樣。事實(shí)上,NumPy 習(xí)慣用法更簡(jiǎn)單!最后一個(gè)示例說(shuō)明了 NumPy 的兩個(gè)功能,這兩個(gè)功能是其大部分強(qiáng)大功能的基礎(chǔ):矢量化和廣播。
矢量化描述了代碼中沒(méi)有任何顯式循環(huán)、索引等。當(dāng)然,這些事情只是在優(yōu)化、預(yù)編譯 C 代碼的“幕后”發(fā)生的。矢量化代碼有很多優(yōu)點(diǎn),其中包括:
Pythonic
代碼。如果沒(méi)有矢量化,我們的代碼將充斥著低效且難以閱讀的for
循環(huán)。
廣播是用于描述操作的隱式逐元素行為的術(shù)語(yǔ);一般而言,在 NumPy 中,所有操作,不僅是算術(shù)運(yùn)算,還有邏輯、按位、函數(shù)等,都以這種隱式的逐元素方式表現(xiàn),即它們正在廣播。此外,在上面的例子中,a
和b
可以是相同形狀的多維數(shù)組,或者一個(gè)標(biāo)量和一個(gè)數(shù)組,甚至兩個(gè)不同形狀的數(shù)組,前提是較小的數(shù)組可以“擴(kuò)展”到較大的數(shù)組中,由此產(chǎn)生的廣播是明確的。
NumPy 完全支持面向?qū)ο蟮姆椒?,再次?ndarray 開(kāi)始。例如,ndarray是一個(gè)類(lèi),擁有許多方法和屬性。它的許多方法由最外層 NumPy 命名空間中的函數(shù)鏡像,允許程序員以他們喜歡的任何樣式進(jìn)行編碼。這種靈活性使 NumPy 數(shù)組方言和 NumPy?ndarray 類(lèi)成為 Python 中使用的多維數(shù)據(jù)交換的事實(shí)上的語(yǔ)言。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: