Python numpy 入門系列 02 資料型別
阿新 • • 發佈:2022-03-17
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)
資料型別物件(numpy.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) |
REF
https://www.runoob.com/numpy/numpy-dtype.html