清華學(xué)神尹成帶你學(xué)習(xí)NumPy
什么是Numpy?
NumPy是Python中科學(xué)計(jì)算的基礎(chǔ)包。它是一個(gè)Python庫,提供多維數(shù)組對(duì)象,各種派生對(duì)象(如掩碼數(shù)組和矩陣),以及用于數(shù)組快速操作的各種API,有包括數(shù)學(xué)、邏輯、形狀操作、排序、選擇、輸入輸出、離散傅立葉變換、基本線性代數(shù),基本統(tǒng)計(jì)運(yùn)算和隨機(jī)模擬等等。
NumPy包的核心是 ndarray 對(duì)象。它封裝了python原生的同數(shù)據(jù)類型的 n 維數(shù)組,為了保證其性能優(yōu)良,其中有許多操作都是代碼在本地進(jìn)行編譯后執(zhí)行的。
NumPy數(shù)組 和 原生Python Array(數(shù)組)之間有幾個(gè)重要的區(qū)別
NumPy 數(shù)組在創(chuàng)建時(shí)具有固定的大小,與Python的原生數(shù)組對(duì)象(可以動(dòng)態(tài)增長(zhǎng))不同。更改ndarray的大小將創(chuàng)建一個(gè)新數(shù)組并刪除原來的數(shù)組。
NumPy 數(shù)組中的元素都需要具有相同的數(shù)據(jù)類型,因此在內(nèi)存中的大小相同。 例外情況:Python的原生數(shù)組里包含了NumPy的對(duì)象的時(shí)候,這種情況下就允許不同大小元素的數(shù)組。
NumPy 數(shù)組有助于對(duì)大量數(shù)據(jù)進(jìn)行高級(jí)數(shù)學(xué)和其他類型的操作。通常,這些操作的執(zhí)行效率更高,比使用Python原生數(shù)組的代碼更少。
越來越多的基于Python的科學(xué)和數(shù)學(xué)軟件包使用NumPy數(shù)組; 雖然這些工具通常都支持Python的原生數(shù)組作為參數(shù),但它們?cè)谔幚碇皶?huì)還是會(huì)將輸入的數(shù)組轉(zhuǎn)換為NumPy的數(shù)組,而且也通常輸出為NumPy數(shù)組。換句話說,為了高效地使用當(dāng)今科學(xué)/數(shù)學(xué)基于Python的工具(大部分的科學(xué)計(jì)算工具),你只知道如何使用Python的原生數(shù)組類型是不夠的 - 還需要知道如何使用 NumPy 數(shù)組。
關(guān)于數(shù)組大小和速度的要點(diǎn)在科學(xué)計(jì)算中尤為重要。舉一個(gè)簡(jiǎn)單的例子,考慮將1維數(shù)組中的每個(gè)元素與相同長(zhǎng)度的另一個(gè)序列中的相應(yīng)元素相乘的情況。如果數(shù)據(jù)存儲(chǔ)在兩個(gè)Python 列表 a 和 b 中,我們可以迭代每個(gè)元素,如下所示: