3、Numpy的數據類型

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.]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章