NumPy 數據類型
numpy 支持的數據類型比 Python 內置的類型要多很多,基本上可以和 C 語言的數據類型對應上,其中部分類型對應為 Python 內置的類型。下表列舉了常用 NumPy 基本類型。
名稱 | 描述 |
---|---|
bool_ | 布爾型數據類型(True 或者 False) |
int_ | 默認的整數類型(類似於 C 語言中的 long,int32 或 int64) |
intc | 與 C 的 int 類型一樣,一般是 int32 或 int 64 |
intp | 用於索引的整數類型(類似於 C 的 ssize_t,一般情況下仍然是 int32 或 int64) |
int8 | 位元組(-128 to 127) |
int16 | 整數(-32768 to 32767) |
int32 | 整數(-2147483648 to 2147483647) |
int64 | 整數(-9223372036854775808 to 9223372036854775807) |
uint8 | 無符號整數(0 to 255) |
uint16 | 無符號整數(0 to 65535) |
uint32 | 無符號整數(0 to 4294967295) |
uint64 | 無符號整數(0 to 18446744073709551615) |
float_ | float64 類型的簡寫 |
float16 | 半精度浮點數,包括:1 個符號位,5 個指數位,10 個尾數位 |
float32 | 單精確度浮點數,包括:1 個符號位,8 個指數位,23 個尾數位 |
float64 | 雙精度浮點數,包括:1 個符號位,11 個指數位,52 個尾數位 |
complex_ | complex128 類型的簡寫,即 128 位複數 |
complex64 | 複數,表示雙 32 位浮點數(實數部分和虛數部分) |
complex128 | 複數,表示雙 64 位浮點數(實數部分和虛數部分) |
numpy 的數值類型實際上是 dtype 對象的實例,並對應唯一的字元,包括 np.bool_,np.int32,np.float32,等等。
數據類型對象 (dtype)
數據類型對象是用來描述與數組對應的記憶體區域如何使用,這依賴如下幾個方面:
- 數據的類型(整數,浮點數或者 Python 對象)
- 數據的大小(例如, 整數使用多少個位元組存儲)
- 數據的位元組順序(小端法或大端法)
- 在結構化類型的情況下,字段的名稱、每個字段的數據類型和每個字段所取的記憶體塊的部分
- 如果數據類型是子數組,它的形狀和數據類型
位元組順序是通過對數據類型預先設定"<"或">"來決定的。"<"意味著小端法(最小值存儲在最小的地址,即低位組放在最前面)。">"意味著大端法(最重要的位元組存儲在最小的地址,即高位組放在最前面)。
dtype 對象是使用以下語法構造的:
numpy.dtype(object, align, copy)
- object - 要轉換為的數據類型對象
- align - 如果為 true,填充字段使其類似 C 的結構體。
- copy - 複製 dtype 對象 ,如果為 false,則是對內置數據類型對象的引用
實例
接下來我們可以通過實例來理解。
實例 1
import numpy as np
# 使用標量類型
dt = np.dtype(np.int32)
print(dt)
輸出結果為:
int32
實例 2
import numpy as np
# int8, int16, int32, int64 四種數據類型可以使用字串 'i1', 'i2','i4','i8' 代替
dt = np.dtype('i4')
print(dt)
輸出結果為:
int32
實例 3
import numpy as np
# 位元組順序標注
dt = np.dtype('<i4')
print(dt)
輸出結果為:
int32
下麵實例展示結構化數據類型的使用,類型字段和對應的實際類型將被創建。
實例 4
# 首先創建結構化數據類型
import numpy as np
dt = np.dtype([('age',np.int8)])
print(dt)
輸出結果為:
[('age', 'i1')]
實例 5
# 將數據類型應用於 ndarray 對象
import numpy as np
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print(a)
輸出結果為:
[(10,) (20,) (30,)]
實例 6
# 類型字段名可以用於存取實際的 age 列
import numpy as np
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
import numpy as np
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
print(student)
輸出結果為:
[('name', 'S20'), ('age', 'i1'), ('marks', 'f4')]
實例 8
import numpy as np
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)]
每個內建類型都有一個唯一定義它的字元代碼,如下:
字元 | 對應類型 |
---|---|
b | 布爾型 |
i | (有符號) 整型 |
u | 無符號整型 integer |
f | 浮點型 |
c | 複數浮點型 |
m | timedelta(時間間隔) |
M | datetime(日期時間) |
O | (Python) 對象 |
S, a | (byte-)字串 |
U | Unicode |
V | 原始數據 (void) |