NumPy 是一個(gè)免費(fèi)的開源 Python 庫,用于 n 維數(shù)組(也稱為張量)處理和數(shù)值計(jì)算。
什么是 NUMPY?
NumPy 是一個(gè)免費(fèi)的 Python 編程語言開源庫,它功能強(qiáng)大、已經(jīng)過充分優(yōu)化,并增加了對(duì)大型多維數(shù)組(也稱為矩陣或張量)的支持。NumPy 還提供了一系列高級(jí)數(shù)學(xué)函數(shù),可與這些數(shù)組結(jié)合使用。其中包括基本的線性代數(shù)、隨機(jī)模擬、傅立葉變換、三角運(yùn)算和統(tǒng)計(jì)運(yùn)算。
NumPy 代表 “numerical Python”,基于早期的 Numeric 和 Numarray 庫構(gòu)建而成,旨在為 Python 提供快速的數(shù)字計(jì)算。如今,NumPy 貢獻(xiàn)者眾多,并得到了 NumFOCUS 的贊助。
作為科學(xué)計(jì)算的核心庫,NumPy 是 Pandas、Scikit-learn和SciPy等庫的基礎(chǔ)。它廣泛應(yīng)用于在大型數(shù)組上執(zhí)行優(yōu)化的數(shù)學(xué)運(yùn)算。
選擇 NUMPY 的原因及其工作原理
多維數(shù)組是 NumPy 庫的中心數(shù)據(jù)結(jié)構(gòu),通常代表值的網(wǎng)格。NumPy 的 ndarray 是一個(gè)同構(gòu)的 n 維數(shù)組對(duì)象,描述了類似類型的元素或項(xiàng)的集合。在這些ndarrays中,每個(gè)項(xiàng)都包含大小相同的內(nèi)存塊,且每個(gè)內(nèi)存塊都采用同一識(shí)別方式。這能夠高效、快速、輕松地處理科學(xué)計(jì)算的數(shù)據(jù)。
NumPy 數(shù)組運(yùn)算速度比 Python Lists 要快,因?yàn)?NumPy 數(shù)組是類似數(shù)據(jù)類型的編譯,并且在內(nèi)存中密集打包。相比之下,Python Lists 可以具有不同的數(shù)據(jù)類型,在系統(tǒng)執(zhí)行計(jì)算時(shí)會(huì)增加對(duì)這些數(shù)據(jù)類型的限制。
| NumPy 的優(yōu)勢(shì)
NumPy 具有以下重要優(yōu)勢(shì)和特性:
NumPy 的 ndarray 計(jì)算概念是 Python 和 PyData 科學(xué)生態(tài)系統(tǒng)的核心。
NumPy 為高度優(yōu)化的 C 函數(shù)提供了 Python 前端,可提供簡(jiǎn)單的 Python 接口,并實(shí)現(xiàn)編譯代碼的速度。
NumPy 強(qiáng)大的 N 維數(shù)組對(duì)象可與各種庫集成。
與使用 Python 的內(nèi)置列表相比,NumPy 數(shù)組可以更高效地使用大型數(shù)據(jù)集來執(zhí)行高級(jí)數(shù)學(xué)運(yùn)算,且使用的代碼更少。對(duì)于大小和速度至關(guān)重要的科學(xué)計(jì)算序列而言,這一點(diǎn)至關(guān)重要。
NUMPY 的重要意義
NumPy 讓數(shù)據(jù)科學(xué)家更易于使用 Python 并提供了 C 級(jí)優(yōu)化,有助于快速創(chuàng)建高效代碼,進(jìn)行探索數(shù)據(jù)分析和模型構(gòu)建。如今,要想在科學(xué)計(jì)算領(lǐng)域取得成功,對(duì)算法進(jìn)行快速原型設(shè)計(jì)必不可少,而這二者的實(shí)現(xiàn)對(duì)此至關(guān)重要。因此,可以使用 NumPy 在 Python 中實(shí)現(xiàn)多維數(shù)據(jù)通信。
利用 PYTHON 進(jìn)行 GPU 加速計(jì)算
在架構(gòu)方面,CPU 僅由幾個(gè)具有大緩存內(nèi)存的核心組成,一次只可以處理幾個(gè)軟件線程。相比之下,GPU 由數(shù)百個(gè)核心組成,可以同時(shí)處理數(shù)千個(gè)線程。
NumPy 已成為在 Python 中實(shí)現(xiàn)多維數(shù)據(jù)通信的實(shí)際方法。然而,對(duì)于多核 GPU,這種實(shí)施并非最佳。因此,對(duì)于較新的針對(duì) GPU 優(yōu)化的庫實(shí)施 Numpy 數(shù)組或與 Numpy 數(shù)組進(jìn)行互操作。
NVIDIACUDA是 NVIDIA 專為 GPU 通用計(jì)算開發(fā)的并行計(jì)算平臺(tái)和編程模型。CUDA 數(shù)組接口是描述 GPU 數(shù)組(張量)的標(biāo)準(zhǔn)格式,允許在不同的庫之間共享 GPU 數(shù)組,而無需復(fù)制或轉(zhuǎn)換數(shù)據(jù)。CUDA 數(shù)組由 Numba、CuPy、MXNet 和 PyTorch 提供支持。
CuPy是一個(gè)利用 GPU 庫在 NVIDIA GPU 上實(shí)施 NumPy CUDA 數(shù)組的庫。
Numba是一個(gè) Python 編譯器,可以編譯 Python 代碼,以在支持 CUDA 的 GPU 上執(zhí)行。Numba 直接支持 NumPy 數(shù)組。
Apache MXNet是一個(gè)靈活高效的深度學(xué)習(xí)庫??梢允褂盟?NDArray 將模型的輸入和輸出表示和操作為多維數(shù)組。NDArray 類似于 NumPy 的 ndarray,但它們可以在 GPU 上運(yùn)行,以加速計(jì)算。
PyTorch是一種開源深度學(xué)習(xí)框架,以出色的靈活性和易用性著稱。Pytorch Tensors 與 NumPy 的 ndarray 類似,但它們可以在 GPU 上運(yùn)行,加速計(jì)算。
NVIDIA GPU 加速的端到端數(shù)據(jù)科學(xué)
基于CUDA-X AI創(chuàng)建的 NVIDIARAPIDS開源軟件庫套件使您完全能夠在 GPU 上執(zhí)行端到端數(shù)據(jù)科學(xué)和分析流程。此套件依靠 NVIDIA CUDA 基元進(jìn)行低級(jí)別計(jì)算優(yōu)化,但通過用戶友好型 Python 接口實(shí)現(xiàn)了 GPU 并行化和高帶寬顯存速度。
借助 RAPIDS GPU DataFrame,數(shù)據(jù)可以通過一個(gè)類似 Pandas 的接口加載到 GPU 上,然后用于各種連接的機(jī)器學(xué)習(xí)和圖形分析算法,而無需離開 GPU。這種級(jí)別的互操作性是通過 Apache Arrow 這樣的庫實(shí)現(xiàn)的。僅需一行代碼,即可從 NumPy 數(shù)組、Pandas DataFrame 和 PyArrow 表格創(chuàng)建 GPU 數(shù)據(jù)框。其他項(xiàng)目可以使用數(shù)組接口交換 CUDA 數(shù)據(jù)。這可加速端到端流程(從數(shù)據(jù)準(zhǔn)備到機(jī)器學(xué)習(xí),再到深度學(xué)習(xí))。
RAPIDS 支持在許多熱門數(shù)據(jù)科學(xué)庫之間共享設(shè)備內(nèi)存。這樣可將數(shù)據(jù)保留在 GPU 上,并省去了來回復(fù)制主機(jī)內(nèi)存的高昂成本。
-
NVIDIA
+關(guān)注
關(guān)注
14文章
4855瀏覽量
102709 -
gpu
+關(guān)注
關(guān)注
28文章
4673瀏覽量
128591 -
開源
+關(guān)注
關(guān)注
3文章
3215瀏覽量
42327 -
python
+關(guān)注
關(guān)注
55文章
4767瀏覽量
84375
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論