1、番外說明
大家好,我是小P,本系列是本人對Python模塊Numpy的一些學習記錄,總結於此一方面方便其它初學者學習,另一方面害怕自己遺忘,希望大家喜歡。此外,對“目標檢測/模型壓縮/語義分割”感興趣的小夥伴,歡迎加入QQ羣 813221712 討論交流,進羣請看羣公告!(可以點擊如下連接直接加入!)
點擊鏈接加入羣聊【Object Detection】:https://jq.qq.com/?_wv=1027&k=5kXCXF8
2、正題
參考鏈接:
http://www.runoob.com/numpy/numpy-dtype.html
numpy 支持的數據類型比 Python 內置的類型要多很多,基本上可以和 C 語言的數據類型對應上,其中部分類型對應爲 Python 內置的類型。下表列舉了常用 NumPy 基本類型。
numpy 的數值類型實際上是 dtype 對象的實例,並對應唯一的字符,包括 np.bool_,np.int32,np.float32,等等。
每個內建類型都有一個唯一定義它的字符代碼,如下:
數據類型對象 (dtype)
數據類型對象是用來描述與數組對應的內存區域如何使用,這依賴如下幾個方面:
● 數據的類型(整數,浮點數或者 Python 對象)
● 數據的大小(例如, 整數使用多少個字節存儲)
● 數據的字節順序(小端法或大端法)
● 在結構化類型的情況下,字段的名稱、每個字段的數據類型和每個字段所取的內存塊的部分
● 如果數據類型是子數組,它的形狀和數據類型
字節順序是通過對數據類型預先設定"<“或”>“來決定的。”<“意味着小端法(最小值存儲在最小的地址,即低位組放在最前面)。”>"意味着大端法(最重要的字節存儲在最小的地址,即高位組放在最前面)。
dtype 對象是使用以下語法構造的:
numpy.dtype(object, align, copy)
● object - 要轉換爲的數據類型對象
● align - 如果爲 true,填充字段使其類似 C 的結構體。
● copy - 複製 dtype 對象 ,如果爲 false,則是對內置數據類型對象的引用
實例
接下來我們可以通過實例來理解。
import numpy as np
實例 1
使用dtype輸出所使用標量類型
dt = np.dtype(np.int32)
print(dt)
輸出結果爲:
int32
實例 2
int8, int16, int32, int64 四種數據類型可以使用字符串 ‘i1’, ‘i2’,‘i4’,‘i8’ 代替
dt = np.dtype('i4')
print(dt)
輸出結果爲:
int32
實例 3
使用‘<’或‘>’來標註字節順序爲大端還是小端存儲
dt = np.dtype('<i4')
print(dt)
輸出結果爲:
int32
下面實例展示結構化數據類型的使用,類型字段和對應的實際類型將被創建。
實例 4
首先創建結構化數據類型,這種結構化數據類型有點類似於結構體
dt = np.dtype([('age',np.int8)])
print(dt)
輸出結果爲:
[('age', 'i1')]
實例 5
將結構化數據類型應用於 ndarray 對象
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print(a)
輸出結果爲:
[(10,) (20,) (30,)]
實例 6
類型字段名可以用於存取實際的 age 列
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print(a['age'])
輸出結果爲:
[10 20 30]
下面的示例定義一個結構化數據類型 student,包含字符串字段 name,整數字段 age,及浮點字段 marks,並將這個 dtype 應用到 ndarray 對象。
實例 7
創建結構化數據類型student
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
print(student)
輸出結果爲:
[('name', 'S20'), ('age', 'i1'), ('marks', '<f4')]
實例 8
用定義好的結構化數據類型生成數組
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student)
print(a)
輸出結果爲:
[('abc', 21, 50.0), ('xyz', 18, 75.0)]
也可以按類型字段名存取數據:
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student)
print(a['age'])
print(a['name'])
print(a['marks'])
輸出結果爲:
[21 18]
[b'abc' b'xyz']
[50. 75.]