NumPy 支持比 Python 更多種類(lèi)的數(shù)值類(lèi)型。 下表顯示了 NumPy 中定義的不同標(biāo)量數(shù)據(jù)類(lèi)型。
序號(hào) | 數(shù)據(jù)類(lèi)型及描述 |
---|---|
1. | bool_存儲(chǔ)為一個(gè)字節(jié)的布爾值(真或假) |
2. | int_默認(rèn)整數(shù),相當(dāng)于 C 的long,通常為int32或int64 |
3. | intc相當(dāng)于 C 的int,通常為int32或int64 |
4. | intp用于索引的整數(shù),相當(dāng)于 C 的size_t,通常為int32或int64 |
5. | int8字節(jié)(-128 ~ 127) |
6. | int1616 位整數(shù)(-32768 ~ 32767) |
7. | int3232 位整數(shù)(-2147483648 ~ 2147483647) |
8. | int6464 位整數(shù)(-9223372036854775808 ~ 9223372036854775807) |
9. | uint88 位無(wú)符號(hào)整數(shù)(0 ~ 255) |
10. | uint1616 位無(wú)符號(hào)整數(shù)(0 ~ 65535) |
11. | uint3232 位無(wú)符號(hào)整數(shù)(0 ~ 4294967295) |
12. | uint6464 位無(wú)符號(hào)整數(shù)(0 ~ 18446744073709551615) |
13. | float_float64的簡(jiǎn)寫(xiě) |
14. | float16半精度浮點(diǎn):符號(hào)位,5 位指數(shù),10 位尾數(shù) |
15. | float32單精度浮點(diǎn):符號(hào)位,8 位指數(shù),23 位尾數(shù) |
16. | float64雙精度浮點(diǎn):符號(hào)位,11 位指數(shù),52 位尾數(shù) |
17. | complex_complex128的簡(jiǎn)寫(xiě) |
18. | complex64復(fù)數(shù),由兩個(gè) 32 位浮點(diǎn)表示(實(shí)部和虛部) |
19. | complex128復(fù)數(shù),由兩個(gè) 64 位浮點(diǎn)表示(實(shí)部和虛部) |
NumPy 數(shù)字類(lèi)型是dtype(數(shù)據(jù)類(lèi)型)對(duì)象的實(shí)例,每個(gè)對(duì)象具有唯一的特征。 這些類(lèi)型可以是np.bool_,np.float32等。
數(shù)據(jù)類(lèi)型對(duì)象描述了對(duì)應(yīng)于數(shù)組的固定內(nèi)存塊的解釋?zhuān)Q于以下方面:
數(shù)據(jù)類(lèi)型(整數(shù)、浮點(diǎn)或者 Python 對(duì)象)
數(shù)據(jù)大小
字節(jié)序(小端或大端)
在結(jié)構(gòu)化類(lèi)型的情況下,字段的名稱(chēng),每個(gè)字段的數(shù)據(jù)類(lèi)型,和每個(gè)字段占用的內(nèi)存塊部分。
如果數(shù)據(jù)類(lèi)型是子序列,它的形狀和數(shù)據(jù)類(lèi)型。
字節(jié)順序取決于數(shù)據(jù)類(lèi)型的前綴<或>。<意味著編碼是小端(最小有效字節(jié)存儲(chǔ)在最小地址中)。>意味著編碼是大端(最大有效字節(jié)存儲(chǔ)在最小地址中)。
dtype可由一下語(yǔ)法構(gòu)造:
numpy.dtype(object, align, copy)
參數(shù)為:
Object:被轉(zhuǎn)換為數(shù)據(jù)類(lèi)型的對(duì)象。
Align:如果為true,則向字段添加間隔,使其類(lèi)似 C 的結(jié)構(gòu)體。
Copy? 生成dtype對(duì)象的新副本,如果為flase,結(jié)果是內(nèi)建數(shù)據(jù)類(lèi)型對(duì)象的引用。
# 使用數(shù)組標(biāo)量類(lèi)型 import numpy as np dt = np.dtype(np.int32) print dt
輸出如下:
int32
#int8,int16,int32,int64 可替換為等價(jià)的字符串 'i1','i2','i4',以及其他。 import numpy as np dt = np.dtype('i4') print dt
輸出如下:
int32
# 使用端記號(hào) import numpy as np dt = np.dtype('>i4') print dt
輸出如下:
>i4
下面的例子展示了結(jié)構(gòu)化數(shù)據(jù)類(lèi)型的使用。 這里聲明了字段名稱(chēng)和相應(yīng)的標(biāo)量數(shù)據(jù)類(lèi)型。
# 首先創(chuàng)建結(jié)構(gòu)化數(shù)據(jù)類(lèi)型。 import numpy as np dt = np.dtype([('age',np.int8)]) print dt
輸出如下:
[('age', 'i1')]
# 現(xiàn)在將其應(yīng)用于 ndarray 對(duì)象 import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print a
輸出如下:
[(10,) (20,) (30,)]
# 文件名稱(chēng)可用于訪問(wèn) age 列的內(nèi)容 import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print a['age']
輸出如下:
[10 20 30]
以下示例定義名為 student 的結(jié)構(gòu)化數(shù)據(jù)類(lèi)型,其中包含字符串字段name,整數(shù)字段age和浮點(diǎn)字段marks。 此dtype應(yīng)用于ndarray對(duì)象。
import numpy as np student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) print student
輸出如下:
[('name', 'S20'), ('age', 'i1'), ('marks', '<f4')])
import numpy as np student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student) print a
輸出如下:
[('abc', 21, 50.0), ('xyz', 18, 75.0)]
每個(gè)內(nèi)建類(lèi)型都有一個(gè)唯一定義它的字符代碼:
'b':布爾值
'i':符號(hào)整數(shù)
'u':無(wú)符號(hào)整數(shù)
'f':浮點(diǎn)
'c':復(fù)數(shù)浮點(diǎn)
'm':時(shí)間間隔
'M':日期時(shí)間
'O':Python 對(duì)象
'S', 'a':字節(jié)串
'U':Unicode
'V':原始數(shù)據(jù)(void)