NumPy 比 Python 支持更多种类的数值类型。下面是 NumPy 中定义的最常用标量数据类型的列表。
数据类型 | 描述 |
---|---|
bool_ | 布尔值(True 或 False)存储为字节。 |
short | 16 位有符号整数 ; 与 C Short 相同。 |
intc | 32 位有符号整数; 与 C int 相同。 |
int_ | 64 位有符号整数; 与 Python int 和 C long 相同。 |
int8 | 字节(-128 到 127)。 |
int16 | 整数(-32768 到 32767)。 |
int32 | 整数(-2147483648 到 2147483647)。 |
int32 | 整数(-2147483648 到 2147483647)。 td> |
int64 | 整数(-9223372036854775808 到 9223372036854775807)。 |
uint8 | 无符号整数(0 到 255)。 |
uint16 | 无符号整数(0 到 65535)。 |
uint32 | 无符号整数(0到4294967295)。 |
uint64 | 无符号整数(0到18446744073709551615)。 |
uint64 | 无符号整数(0到18446744073709551615)。 td> |
intp | 用于索引的整数,通常与 ssize_t 相同。 |
float_ | 与float64相同。 |
float16 | 16位精度浮点数类型:符号位,5位指数,10位尾数 . |
float32 | 32位精度浮点数类型:符号位,8位指数,23位尾数。 |
float64 | 64位精度浮点数类型:符号位,11位指数,52位尾数。 |
double | 64位精度浮点数类型:符号位,11位指数,52位尾数。 与 Python float 和 C double 相同。 |
complex_ | 与complex128相同。 |
complex64 | 复数,由两个 32 位浮点数(实部和虚部)表示。 |
complex128 | 复数,由下式表示 两个 64 位浮点数(实部和虚部)。 |
NumPy 数值类型是 dtype(数据类型)对象的实例,每个对象都具有独特的特征。使用以下方式导入 NumPy 后:
import numpy as np
数据类型可用作 np.bool_、np.float32 等。
数据类型对象(dtype)
A数据类型对象描述了如何解释与数组项相对应的固定大小内存块中的字节。它描述了数据的以下方面:
- 数据类型(整数、浮点数、Python 对象等)
- 数据大小
- 数据的字节顺序(小端或大端)
- 如果数据类型是结构化数据类型,则字段名称、每个字段的数据类型以及所占用的内存块的部分
- 如果数据类型是子数组,则其形状和数据类型
字节顺序由数据类型前面的 < 或 > 决定。 '<' 表示编码是小尾数法(最低有效位存储在最小地址中)。 '>' 表示编码是大端字节序(最高有效字节存储在最小地址中)。
dtype 对象使用以下语法构造:
numpy.dtype(object, align, copy)
参数
object | 必需。 指定要转换为数据类型对象的对象。 |
align | 可选。 如果为 true,则向字段添加填充,使其类似于 C 结构。 |
copy | 可选。 创建数据类型对象的新副本。如果为 False,结果可能只是对内置数据类型对象的引用。 |
示例:
示例下面显示了如何创建结构化数据类型。
import numpy as np
# 使用数组标量类型
dt1 = np.dtype(np.int32)
print("dt1:", dt1)
dt2 = np.dtype(np.float32)
print("dt2:", dt2)
#int8、int16、int32、int64可替换
#by 等效字符串 'i1', 'i2', 'i4', 'i8'
dt3 = np.dtype('i4')
print("dt3:", dt3)
#同理,float8、float16、float32、float4都可以
#替换为字符串"f1"、"f2"、"f4"、"f8"
dt4 = np.dtype('f4')
print("dt4:", dt4)
上述代码的输出将是:
dt1: int32
dt2: float32
dt3: int32
dt4: float32
示例:
下面示例显示了如何使用字节序表示法创建结构化数据类型。
import numpy as np
dt1 = np.dtype('>i4')
print("dt1:", dt1)
dt2 = np.dtype('<i4')
print("dt2:", dt2)
上述代码的输出将是:
dt1: >i4
dt2: int32
示例:
在下面的示例中,结构化数据类型vertex是使用整数字段"x"和"y"创建的。之后,它将应用于 ndarray 对象 Arr。
import numpy as np
vertex = np.dtype([('x','>i4'), ('y', '>i4')])
Arr = np.array([(10, 20),
(10, -20),
(-10, 20),
(-10, -20)], dtype = vertex)
#打印数据类型
print(vertex)
#打印Arr的(x,y)坐标
print("\nArr contains:")
print(Arr)
上述代码的输出将是:
[('x', '>i4'), ('y', '>i4')]
Arr contains:
[( 10, 20) ( 10, -20) (-10, 20) (-10, -20)]
示例:
再考虑一个示例,结构化数据类型 student 是使用字符串字段"name"、int 字段"age"和浮点字段"marks"创建的。之后将其应用于 ndarray 对象 Arr。
import numpy as np
student = np.dtype([('name','S30'), ('age', 'i4'), ('marks', 'f4')])
Arr = np.array([('John', 25, 63.5),
('Marry', 24, 75),
('Ramesh', 24, 81),
('Kim', 23, 67.5)], dtype = student)
#打印
print("Arr 包含:")
print(Arr)
上述代码的输出将是:
Arr 包含:
[(b'John', 25, 63.5) (b'Marry', 24, 75. ) (b'Ramesh', 24, 81. )
(b'Kim', 23, 67.5)]
每个内置数据类型都有唯一标识它的字符代码。第一个字符指定数据类型,其余字符指定每个项目的字节数,Unicode 除外,在 Unicode 中它被解释为字符数。项目大小必须与现有类型相对应,否则将引发错误。支持的类型有:
- '?' - 布尔值
- 'b' - (signed) byte
- 'i' - (有符号)整数
- 'u' - 无符号整数
- 'f' - 浮点
- 'c' - 复数浮点
- 'm' − timedelta
- 'M' − 日期时间
- 'O' − (Python) 对象
- 'S'、'a' - 以零结尾的字节
- 'U' - Unicode 字符串
- 'V' - 原始数据(无效)