NumPy 學習筆記

NumPy 乃是 python 做資料分析的一項重要的函式庫工具,因此有必要理解其底層的實現細節,本文將記錄我對 NumPy 資料結構的理解。首先,由於 python 本身的物件型別有限,很難去支援複雜的科學計算,因此就有了 NumPy 這個函式庫,藉由擴充更多的型態類別定義以支援更複雜的科學計算任務。首先介紹的是ndarray物件, 這是 NumPy 裡用來儲存數組的 container 結構,ndarray 的 size 是固定的,當ndarray物件建立時會分配一段固定大小的連續記憶體空間,同時 ndarray 也是同質性的,裡面的所存放的 items 也都是固定的 size 與 type。 而決定這一個ndarray陣列物件的資料型別是由另一個物件dtype 所決定。 每一個 ndarray 陣列中的 item 都會被視為獨立的dtype物件,dtype即定義ndarray中所存放的 item 是哪一種型別以及大小,關係示意圖如下圖所示:

其中,根據我的理解圖中的 array scalar 就是 dtype 所定義的資料型別,根據 NumPy 文件的定義共有 24 種。彼此間也有繼承的關係,如下圖所示:

可以看出最上層為一個 generic 型別,之後一一往下繼承並擴充,比如我們要 check float32 是否為 number 的子型別,可如下測試:
>>> np.issubdtype(np.float32, np.number)
>>> True

參考資料:
https://docs.scipy.org/doc/numpy/reference/arrays.html