Python 支持的数据类型有整型、浮点型以及复数型,但这些类型不足以满足科学计算的需求,因此 NumPy 添加了很多其他的数据类型。在实际应用中,我们需要不同精度的数据类型,它们占用的内存空间也是不同的。在 NumPy 中,大部分数据类型名是以数字结尾的,这个数字表示其在内存中占用的位数。
下表显示了 NumPy 中定义的不同标量数据类型。
数据类型
类型 | 描述 |
---|---|
bool_ |
用一个字节存储的布尔类型(值为 TRUE 或 FALSE ) |
int_ |
默认的整数类型(类似于 C 语言中的 long ,int32 或 int64 ) |
intc |
与 C 的 int 类型一样,一般是 int32 或 int64 |
intp |
用于索引的整数类型(类似于 C 的 ssize_t ,一般情况下仍然是 int32 或 int64 ) |
int8 |
字节(-128 to 127) |
int16 |
整数(-32768 to 32767) |
int32 |
整数(-2147483648 to 2147483647) |
int64 |
整数(-9223372036854775808 to 9223372036854775807) |
int128 |
整数 |
longlong |
|
uintc |
与 C 的 uint 类型一样,一般是 uint32 或 uint64 |
uintp |
用于索引的整数类型(类似于 C 的 ssize_t ,一般情况下仍然是 uint32 或 uint64 ) |
uint8 |
无符号整数(0 to 255) |
uint16 |
无符号整数(0 to 65535) |
uint32 |
无符号整数(0 to 4294967295) |
uint64 |
无符号整数(0 to 18446744073709551615) |
uint128 |
无符号整数 |
ulonglong |
|
float_ |
float64 类型的简写 |
float16 |
半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位 |
float32 |
单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位 |
float64 |
双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位 |
float128 |
|
float256 |
|
longfloat |
|
complex_ |
complex128 类型的简写,即 128 位复数 |
complex32 |
复数,表示双 16 位浮点数(实数部分和虚数部分) |
complex64 |
复数,表示双 32 位浮点数(实数部分和虚数部分) |
complex128 |
复数,表示双 64 位浮点数(实数部分和虚数部分) |
complex256 |
复数,表示双 128 位浮点数(实数部分和虚数部分) |
complex512 |
复数,表示双 512 位浮点数(实数部分和虚数部分) |
clongfloat |
NumPy 数字类型是 dtype
(数据类型)对象的实例,每个对象具有唯一的特征。这些类型可以是 np.bool_
,np.float32
等。
数据类型对象 (dtype)
数据类型对象描述了对应于数组的固定内存块的解释,取决于以下方面:
-
数据类型(整数、浮点或者 Python 对象)
-
数据大小
-
字节序(小端或大端)
-
在结构化类型的情况下,字段的名称,每个字段的数据类型,和每个字段占用的内存块部分。
-
如果数据类型是子序列,它的形状和数据类型。
字节顺序取决于数据类型的前缀<或>。<意味着编码是小端(最小有效字节存储在最小地址中)。>意味着编码是大端(最大有效字节存储在最小地址中)。
dtype可由一下语法构造:
numpy.dtype(object, align, copy)
参数为:
-
Object:被转换为数据类型的对象。
-
Align:如果为true,则向字段添加间隔,使其类似 C 的结构体。
-
Copy? 生成dtype对象的新副本,如果为flase,结果是内建数据类型对象的引用。
示例 1
# 使用数组标量类型 import numpy as np dt = np.dtype(np.int32) print dt
输出如下:
int32
示例 2
#int8,int16,int32,int64 可替换为等价的字符串 'i1','i2','i4',以及其他。import numpy as np dt = np.dtype('i4') print dt
输出如下:
int32
示例 3
# 使用端记号 import numpy as np dt = np.dtype('>i4') print dt
输出如下:
>i4
下面的例子展示了结构化数据类型的使用。这里声明了字段名称和相应的标量数据类型。
示例 4
# 首先创建结构化数据类型。import numpy as np dt = np.dtype([('age',np.int8)]) print dt
输出如下:
[('age', 'i1')]
示例 5
# 现在将其应用于 ndarray 对象 import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print a
输出如下:
[(10,) (20,) (30,)]
示例 6
# 文件名称可用于访问 age 列的内容 import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print a['age']
输出如下:
[10 20 30]
示例 7
以下示例定义名为 student 的结构化数据类型,其中包含字符串字段name,整数字段age和浮点字段marks。此dtype应用于ndarray对象。
import numpy as np student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) print student
输出如下:
[('name', 'S20'), ('age', 'i1'), ('marks', '<f4')])
示例 8
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)]
每个内建类型都有一个唯一定义它的字符代码:
-
'b':布尔值
-
'i':符号整数
-
'u':无符号整数
-
'f':浮点
-
'c':复数浮点
-
'm':时间间隔
-
'M':日期时间
-
'O':Python 对象
-
'S', 'a':字节串
-
'U':Unicode
-
'V':原始数据(void)