NumPy 簡介



NumPy 簡介

NumPy 是一個 Python 包。它代表“Numerical Python”。它是一個包含多維陣列物件和用於陣列處理的例程集合的庫。

Numeric,NumPy 的祖先,由 Jim Hugunin 開發。另一個包 Numarray 也得到了開發,它具有一些額外的功能。2005 年,Travis Oliphant 透過將 Numarray 的特性整合到 Numeric 包中建立了 NumPy 包。許多人參與了這個開源專案。

使用 NumPy 進行的操作

使用 NumPy,開發人員可以執行以下操作:

  • 陣列上的數學和邏輯運算。

  • 傅立葉變換和用於形狀操作的例程。

  • 與線性代數相關的運算。NumPy 內建了線性代數和隨機數生成函式。

NumPy – MATLAB 的替代品

NumPy 通常與 SciPy(科學 Python)和 Matplotlib(繪相簿)等包結合使用。這種組合被廣泛用作 MATLAB 的替代品,MATLAB 是一個流行的技術計算平臺。然而,Python 的 MATLAB 替代方案現在被視為一種更現代、更完整的程式語言。

NumPy 的一個重要優勢在於它是開源的,任何人都可以免費使用它。

為什麼 NumPy 比列表更快?

NumPy 陣列比 Python 列表快得多,原因如下:

方面 NumPy 列表
記憶體儲存 NumPy 使用連續的記憶體塊,這提高了快取效率和訪問速度。 Python 列表包含指向物件的指標,導致更多的記憶體碎片和更慢的訪問速度。
資料型別 NumPy 支援同類資料型別(所有元素都是相同型別),從而提高了記憶體使用效率。 Python 列表可以包含異類資料型別(元素可以是不同型別),導致更高的記憶體開銷。
運算 NumPy 使用向量運算,利用 SIMD(單指令多資料)進行並行處理。 Python 列表依賴於基於迴圈的運算,由於 Python 解釋性質的開銷,這些運算速度較慢。
效率 NumPy是用C語言編寫的,並且針對性能進行了最佳化,減少了數值運算的執行時間。 Python 列表作為 Python 位元組碼執行,通常比編譯後的 C 程式碼慢。
記憶體使用 由於固定資料型別和連續儲存,NumPy 需要更少的記憶體。 Python 列表使用更多的記憶體,因為每個元素都是一個單獨的 Python 物件,並有額外的開銷。
廣播 NumPy 支援廣播,允許對不同形狀的陣列進行運算,而無需建立額外的副本。 Python 列表不支援廣播,使得逐元素運算效率較低。
效能 由於連續記憶體儲存,更好的快取利用率,從而導致更快的訪問和處理速度。 由於記憶體分配分散,快取利用率差,導致訪問速度變慢。
功能 NumPy 提供了一套豐富的數學函式和工具,這些函式和工具針對陣列運算進行了最佳化。 Python 列表僅限於基本操作,缺乏高階數學功能。

NumPy是用什麼語言編寫的?

NumPy 主要用以下語言編寫:

  • C:NumPy 的核心功能,包括陣列物件和基本運算的實現,是用 C 語言編寫的。這提供了 NumPy 聞名的卓越效能和效率。

  • Python:NumPy 的使用者介面和高階功能是用 Python 編寫的。這使得它易於使用並與其他 Python 庫整合。

  • Fortran:NumPy 中的一些數值例程,特別是與線性代數相關的例程(如 LAPACK 和 BLAS),是用 Fortran 編寫的。Fortran 以其在數值計算方面的效率而聞名,這增強了 NumPy 在特定型別操作中的效能。

廣告