Python科学计算库Numpy之 dtype
NumPy - 数据类型
NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。
序号
数据类型及描述
bool_
存储为一个字节的布尔值(真或假)
int_
默认整数,相当于 C 的long
,通常为int32
或int64
intc
相当于 C 的int
,通常为int32
或int64
intp
用于索引的整数,相当于 C 的size_t
,通常为int32
或int64
int8
字节(-128 ~ 127)
int16
16 位整数(-32768 ~ 32767)
int32
32 位整数(-2147483648 ~ 2147483647)
int64
64 位整数(-9223372036854775808 ~ 9223372036854775807)
uint8
8 位无符号整数(0 ~ 255)
uint16
16 位无符号整数(0 ~ 65535)
uint32
32 位无符号整数(0 ~ 4294967295)
uint64
64 位无符号整数(0 ~ 18446744073709551615)
float_
float64
的简写
float16
半精度浮点:符号位,5 位指数,10 位尾数
float32
单精度浮点:符号位,8 位指数,23 位尾数
float64
双精度浮点:符号位,11 位指数,52 位尾数
complex_
complex128
的简写
complex64
复数,由两个 32 位浮点表示(实部和虚部)
complex128
复数,由两个 64 位浮点表示(实部和虚部)
NumPy 数字类型是dtype
(数据类型)对象的实例,每个对象具有唯一的特征。 这些类型可以是np.bool_
,np.float32
等
数据类型对象 (dtype
)
数据类型对象描述了对应于数组的固定内存块的解释,取决于以下方面:
- 数据类型(整数、浮点或者 Python 对象)
- 数据大小
- 字节序(小端或大端)
- 在结构化类型的情况下,字段的名称,每个字段的数据类型,和每个字段占用的内存块部分。
- 如果数据类型是子序列,它的形状和数据类型。
字节顺序取决于数据类型的前缀<
或>
。 <
意味着编码是小端(最小有效字节存储在最小地址中)。 >
意味着编码是大端(最大有效字节存储在最小地址中)。
import numpy as np
# numpy.dtype(self, obj, align=False, copy=False)
‘’’
obj : 被转换为数据类型的对象。
align: 如果为true,则向字段添加间隔,使其类似 C 的结构体
copy : 生成dtype对象的新副本,如果为flase,结果是内建数据类型对象的引用。
‘’’
dt1 = np.dtype(np.int32) # 使用数组标量类型
dt2 = np.dtype(‘i4’) # int8,int16,int32,int64 可替换为等价的字符串 ‘i1’,‘i2’,‘i4’,以及其他
dt3 = np.dtype(‘>i4’) # 使用端记号
dt4 = np.dtype([(‘age’, np.int8)]) # 创建结构化数据类型
arr = np.arange(5)
dt5 = arr.astype(np.float64) # 数据类型转换 !!!不能使用 arr.dtype = ‘float64’!!!
ndarray1 = np.array([(10,), (20,), (30,)], dtype=dt4) # 应用于 ndarray 对象
studentdt = np.dtype([(‘name’, ‘S20’), (‘age’, ‘i1’), (‘marks’, ‘f4’)])
student = np.array([(‘abc’, 21, 50), (‘xyz’, 18, 75)], dtype=studentdt)
print(dt5)
print(ndarray1[‘age’])
print(studentdt)
print(student[‘name’])
每个内建类型都有一个唯一定义它的字符代码:
'b'
:布尔值'i'
:符号整数'u'
:无符号整数'f'
:浮点'c'
:复数浮点'm'
:时间间隔'M'
:日期时间'O'
:Python 对象'S', 'a'
:字节串'U'
:Unicode'V'
:原始数据(void
)