NumPy的數據類型
- ndarray 對象的 dtype 屬性中描述了該對象的數據類型信息,返回一個 dtype 對象
- 調用 astype() 會創建一個新對象,不會改變原對象
- 所有的數據類型如下表所示:
數據類型 | 類型代碼 | 說明 |
---|---|---|
int8、uint8 | i1、u1 | 有符號和無符號的8位(1個字節)整形 |
int16、uint16 | i2、u2 | 有符號和無符號的16位(2個字節)整形 |
int32、uint32 | i4、u4 | 有符號和無符號的32位(4個字節)整形 |
int64、uint64 | i8、u8 | 有符號和無符號的64位(8個字節)整形 |
float16 | f2 | 半精度浮點數 |
float32 | f4或f | 標準的單精度浮點數 |
float64 | f8或d | 標準的雙精度浮點數 |
float128 | f16或g | 擴展精度浮點數 |
bool | ? | 存儲布爾類型(存儲爲一個字節) |
object | O | Python對象類型 |
string_ | S | 固定長度的字符串類型(每個字符1個字節) |
unicode_ | U | 固定長度的unicode類型(字節數由平臺決定) |
complex64、complex128、complex256 | c8、c16、c32 | 分別用兩個32位、64位或128位浮點數表示的複數 |
注意:int_
爲 int32
的簡寫,float_
爲 float64
的簡寫,complex_
爲 complex128
的簡寫
import numpy as np
int_arr = np.arange(6).reshape(2, 3)
int_arr
>>> array([[0, 1, 2],
[3, 4, 5]])
可以通過 dtype
屬性獲得類型信息
int_arr.dtype
>>> dtype('int64')
創建指定numpy類型的標量
var_float16 = np.float16([12, 121])
var_float16
>>> array([ 12., 121.], dtype=float16)
var_float16.dtype
>>> dtype('float16')
可以通過 astype()
方法轉換數據類型
float_arr = int_arr.astype(np.float32) # 'f'等效於np.float32
float_arr
>>> array([[0., 1., 2.],
[3., 4., 5.]], dtype=float32)
# 如果將浮點數轉換成整數,小數部分會被直接刪除
float_arr2 = np.array([1.2, 2.6, 3.5, 4.9, 5.0])
float_arr2
>>> array([1.2, 2.6, 3.5, 4.9, 5. ])
float_arr2.astype('int')
>>> array([1, 2, 3, 4, 5])
# 字符串也可以轉爲數字類型
str_arr = np.array(['2.001', '1.25', '88', '-236.123', '00'], dtype=np.string_)
str_arr
>>> array([b'2.001', b'1.25', b'88', b'-236.123', b'00'], dtype='|S8')
str_arr.astype('float')
>>> array([ 2.001, 1.25 , 88. , -236.123, 0. ])
調用 dtype
的 mro
方法即可查看其所有的父類
np.int32.mro()
>>> [numpy.int32,
numpy.signedinteger,
numpy.integer,
numpy.number,
numpy.generic,
object]
可以使用issubdtype()
判斷類型
np.issubdtype(float_arr.dtype, np.floating)
>>> True
np.issubdtype(np.int32, np.floating)
>>> False
自定義類型
my_dtype = np.dtype([('name', 'S10'), ('age', int), ('city', 'S10')]) # 按關鍵字排序
my_dtype
>>> dtype([('name', 'S10'), ('age', '<i8'), ('city', 'S10')])
temp_arr = [('zhangsan', 20, 'BJ'), ('lisi', 22, 'CD'), ('wangwu', 21, 'SH')]
my_arr = np.array(temp_arr, dtype=my_dtype)
my_arr
>>> array([(b'zhangsan', 20, b'BJ'), (b'lisi', 22, b'CD'),
(b'wangwu', 21, b'SH')],
dtype=[('name', 'S10'), ('age', '<i8'), ('city', 'S10')])
my_arr[1]
>>> (b'lisi', 22, b'CD')
my_arr['name']
>>> array([b'zhangsan', b'lisi', b'wangwu'], dtype='|S10')