03_NumPy的數據類型

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.   ])

調用 dtypemro 方法即可查看其所有的父類

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