dtype(數據類型)是一個特殊的對象,它含有ndarray將一塊內存解釋為特定數據類型所需的信息
1 In [18]: sim1 = np.array([1,2,3],dtype=np.float64) 2 3 In [19]: sim2 = np.array([1,2,3],dtype=np.float32) 4 5 In [20]: sim1.dtype 6 Out[20]: dtype('float64') 7 8 In [21]: sim2.dtype 9 Out[21]: dtype('float32')
dtype是Numpy強大和靈活的原因之一。數值型dtype的命名方式相同:一個類型名(如float或int),后面跟一個用於表示各元素位長的數字。標准的雙精度浮點值(既Python中的float)需要占用8字節(既64位)。因此,該類型在Numpy中就記作float64。
Numpy的數據類型
| 類型 | 類型代碼 | 說明 |
| int8、uint8 | i1、u1 | 有符號和無符號的8位(1個字節)整數 |
| int16、uint16 | i2、u2 | 有符號和無符號的16位(2個字節)整數 |
| int32、uint32 | i4、u4 | 有符號和無符號的32位(4個字節)整數 |
| int64、unint64 | i8、u8 | 有符號和無符號的64位(8個字節)整數 |
| float16 | f2 | 半精度浮點數 |
| float32 | f4或f | 標准的單精度浮點數 |
| float64 | f8或d | 標准的雙精度浮點數 |
| float128 | f16或g | 擴展精度浮點數 |
| complex64、complex128、complex256 | c8、c16、c32 | 分別用兩個32位、64位或128位浮點數表示的復數 |
| bool | ? | 存儲True和False值的布爾類型 |
| object | O | Python對象類型 |
| string_ | S | 固定長度的字符串長度(每個字符1個字節) |
| unicode_ | U | 固定長度的unicode長度(每個字符1個字節) |
可以通過ndarray的astype方法顯式地轉換其dtype。整數轉換浮點數。
注意:調用astype無論如何都會創建出一個新的數組(原始數據的一份拷貝),即使新dtype跟老dtype相同也是如此。
1 In [22]: sim = np.array([1,2,3,4,5]) 2 3 In [23]: sim.dtype 4 Out[23]: dtype('int64') 5 6 In [24]: float_sim = sim.astype(np.float64) 7 8 In [25]: float_sim.dtype 9 Out[25]: dtype('float64')
浮點數轉換成整數,小數點部分將會被截斷。
1 In [26]: sim = np.array([3.7,-1.6,4.7,-2.3,9.0]) 2 3 In [27]: sim 4 Out[27]: array([ 3.7, -1.6, 4.7, -2.3, 9. ]) 5 6 In [28]: sim.astype(np.int32) 7 Out[28]: array([ 3, -1, 4, -2, 9], dtype=int32)
字符串全是數字,可以用astype將其轉換為數值形式。
1 In [31]: number_strings = np.array(['1.26','-8','-4.6'],dtype=np.string_) 2 3 In [32]: number_strings.astype(np.float64) 4 Out[32]: array([ 1.26, -8. , -4.6 ])
還可以用簡潔的代碼來表示dtype。
1 In [33]: empty_uint32 = np.empty(8,dtype='u4') 2 3 In [34]: empty_uint32 4 Out[34]: 5 array([ 0, 1072693248, 1717986918, 1073899110, 0, 6 1074790400, 0, 1075052544], dtype=uint32)
