資料型態
因為 NumPy 是主要作為資料計算的函式庫,因此 NumPy 裡面的資料型別具有比 Python 內建的資料型別更高的精度,也可以更方便的將陣列資料轉換為指定的型態,這篇教學將會介紹 NumPy 的資料型態以及相對應的轉換方式。
快速導覽:
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
資料型態的種類
NumPy 的資料型態有下列幾種 ( 參考 NumPy 官方說明文件 ):
種類 | 代替字串 | 說明 |
---|---|---|
bool | ? | boolean 布林值。 |
int | i | (signed) integer 帶有符號的整數 ( 正負整數 ),等同 int64。 |
int8 | i1 | 整數 -128~127。 |
int16 | i2 | 整數 -32768~32767。 |
int32 | i4 | 整數 -2147483648~2147483647。 |
int64 | i8 | 整數 -9223372036854775808~9223372036854775807。 |
uint | u | unsigned integer 無有符號的整數 ( 正整數 ),等同 uint64。 |
uint8 | u1 | 正整數 0~255。 |
uint16 | u2 | 正整數 0~65535。 |
uint32 | u4 | 正整數 0~4294967295。 |
uint64 | u8 | 正整數 0~18446744073709551615。 |
float | f | floating-point 浮點數,等同 float64。 |
float16 | f2 | 半精度浮點數。 |
float32 | f4 | 單精度浮點數。 |
float64 | f8 | 雙精度浮點數。 |
complex | c | complex floating-point 浮點類型複數,等同 complex128。 |
complex64 | c8 | 雙 32 位複數。 |
complex128 | c16 | 雙 64 位複數。 |
object | O | object 物件。 |
byte | b | (signed) byte 帶有符號的位元。 |
ubyte | B | unsigned byte 無符號的位元。 |
unicode | U | Unicode。 |
S | (byte-)string 字串。 | |
m | timedelta 時間間隔。 | |
M | datetime 日期時間。 | |
V | void 原始數據。 |
轉換資料型態
NumPy 在定義陣列時,可以透過 dtype 指定資料的型態,就能將陣列內的所有資料轉變成對應的型態 ( 注意,如果有遇到無法互相轉換的型態,會發生錯誤 ),下方的範例,會將原始陣列 a 的資料,轉換成不同型態的陣列。
import numpy as np
a = np.array([1.1, 2.2, 3.3, 0, -1])
b = np.array(a, dtype='?')
c = np.array(a, dtype='U')
d = np.array(a, dtype='S')
e = np.array(a, dtype='B')
f = np.array(a, dtype='i')
print(a) # [ 1.1 2.2 3.3 0. -1. ]
print(b) # [ True True True False True]
print(c) # ['1.1' '2.2' '3.3' '0.0' '-1.0']
print(d) # [b'1.1' b'2.2' b'3.3' b'0.0' b'-1.0']
print(e) # [ 1 2 3 0 255]
print(f) # [ 1 2 3 0 -1]
如果是透過 astype 的方法,則可以將現有的陣列進行資料型態的轉換,下方的範例會將整數陣列,轉換成浮點數陣列。
a = np.array([1, 2, 3, 4], dtype="int32")
b = a.astype('float32')
print(a) # 1, 2, 3, 4
print(b) # 1., 2., 3., 4,
結構化轉換型態
除了單純的轉換資料型態,也可透過「結構化」的方式,讓陣列中同時具有不同型態的資料,下方的例子,會將會將資料轉換成對應的型態。
import numpy as np
dt = np.dtype([('a','U5'),('b','f'),('c','?')])
a = np.array([(1.1,2.2,3.3), (1.1,2.2,3.3)], dtype=dt)
print(a) # [('1.1', 2.2, True) ('1.1', 2.2, True)]
取得資料型態
使用 NumPy 定義的陣列,都可以使用 dtype 的方法來查看該陣列的資料類型,下方的例子會印出不同資料類型陣列的 dtype。
import numpy as np
a = np.array([1,2,3,4,5])
b = np.array([1,2,3,4,5], dtype='U10')
print(a.dtype) # int64
print(b.dtype) # <U10
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~