第四章 NumPy基礎:數(shù)組和向量化計算

NumPy是Numerical Python的縮寫,是Python中用于數(shù)值計算的最重要的基礎包之一。 大多數(shù)提供科學功能的計算包使用NumPy的數(shù)組對象作為數(shù)據(jù)交換的通用語。

以下是NumPy的一些特性:

  • ndarray是一種高效的多維陣列,提供快速的面向矩陣的算術操作和靈活的廣播能力。
  • 數(shù)學函數(shù)可在整個數(shù)據(jù)陣列上進行快速操作,無需編寫循環(huán)。
  • 用于將陣列數(shù)據(jù) 讀/寫 到磁盤并使用內(nèi)存映射文件的工具。
  • 具備線性代數(shù),隨機數(shù)生成和傅里葉變換功能。
  • 用于連接NumPy與用C,C ++或FORTRAN編寫的庫的C語言API。

NumPy對于Python中的數(shù)值計算非常重要的原因之一是因為它旨在提高大型數(shù)據(jù)陣列的效率。 具體有:

  • NumPy內(nèi)部將數(shù)據(jù)存儲在連續(xù)的內(nèi)存塊中,與其他內(nèi)置Python對象無關。 用C語言編寫的NumPy的算法庫可以在這種內(nèi)存上運行,不需要任何類型檢查或其他開銷。 NumPy數(shù)組使用的內(nèi)存也比內(nèi)置Python序列少得多。
  • NumPy操作對整個數(shù)組執(zhí)行復雜的計算,而不需要Python for循環(huán)。

為了讓讀者對性能差異有所了解,考慮包含一百萬個整數(shù)的NumPy數(shù)組以及同等的Python列表:

In [4]: import numpy as np

In [5]: my_arr = np.arange(1000000)

In [6]: my_list = list(range(1000000))

然后將序列都乘以2:

In [7]: %time for _ in range(10): my_arr2 = my_arr * 2
CPU times: user 12.8 ms, sys: 6.24 ms, total: 19 ms
Wall time: 19.5 ms

In [8]: %time for _ in range(10): my_list2 = [x * 2 for x in my_list]
CPU times: user 662 ms, sys: 153 ms, total: 815 ms
Wall time: 813 ms

(以上時間為筆者自己電腦跑出來結果,macOS系統(tǒng))
基于NumPy的算法通常比相對應的純Python算法快10到100倍(或更多),并且使用的內(nèi)存要少得多。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容