ndarray數據類型


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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM