首 页IT知识库收藏内容
当前位置:翔宇亭IT乐园IT知识库Numpy

NumPy的数据类型

减小字体 增大字体 作者:本站  来源:本站整理  发布时间:2025-07-27 08:49:06

NumPy支持的数据类型远比Python本身要多,下表给出了NumPy中定义的标量类型。

 类型名称 含义 
bool_ 布尔类型,仅有True或False两个值,用1个字节来存储 
 int_ 默认的有符号整数类型,类似C语言中的long类型,在32位机上为32位,在64位机上为64位。
 intc 与C语言中的int兼容。
 intp 用于索引的整数类型(类似于C的ssize_t,通常情况下仍然是Int32或int64)
 int8 8位符号整数(一个字节),取值范围:-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 半精度浮点数,包括:1个符号位,5位指数,10位尾数 
 float32 单精度浮点数,包括:1个符号位,8位指数,23位尾数
 float64 双精度浮点数,包括:1个符号位,11位指数,52位尾数
 complex_ complex128的简写 
 complex64 复数,由32位浮点数表示(实数部分和虚数部分) 
 complex128 复数,由64位浮点数表示(实数部分和虚数部分) 

NumPy的数值类型是dtype对象的实例,每个实例都有唯一的字符对应。如np.bool_,np.float32,np.uint32等。

内建数据类型的字符代码

每个内置数据类型都有一个唯一字符代码进行标识,其对应情况如下所示:

 字符代码 对应类型 
 '?'  布尔类型,数组元素只能是True或False
 'b'  有符号8位整型(signed byte)
 'B'  无符号8位整型(unsigned byte)
 'i'  有符号整型
 'u'  无符号整型
 'f'  浮点类型
 'c'  复数-浮点类型
 'm'  timedelta(时间间隔)
 'M'  datetime(日期时间)
 'O'  (Python)对象
 'S', 'a'  字符串(固定长度字符序列)
 'U'  Unicode(固定长度的Unicode字符序列(32位))
 'V'  原始数据(void-每个元素都是一个固定大小的内存块)

数据类型对象-dtype

数据类型对象(data type object)(numpy.dtype类的实例)用于描述数组元素在固定大小的内存区域存储的方式。其主要描述了数据以下几个方面:

(1)数据的类型(如整型、浮点型、Python对象等);

(2)数据的大小(如整型使用多少字节进行存储);

(3)数据的字节顺序(大端方式或小端方式);

(4)如果数据类型是结构化类型(其他数据类型的集合:由简单数据类型组成的命名的序列),则需要说明字段的名称(以便进行访问)、每个字段的数据类型、每个字段占用的内存哪一部分。

(5)如果数据类型是子数组,则其形状(shape)和数据类型是什么。

字节顺序通过在数据类型前加上‘<’或‘>’来决定。
‘<’表示编码是小端方式的(最低有效位存储在最小地址中)。
‘>’表示编码是大端方式的(最高有效字节存储在最小地址中)。

指定和构造数据类型

当需要在NumPy函数或方法中需要数据类型时,就可以运用dype对象或可以转换为dtype对象的类型。

使用下面的语法方式进行构造:

numpy.dtype(object, align, copy)

其中,各参数的含义如下:

object - 要转换的数据类型对象

align - 如果为true,则填充字段,使其类似C的结构体

copy - 创建dtype对象的新副本。如果为false,则结果是对内置数据类型对象的引用

其中,align和copy两个参数是可选参数。

当object为None时,默认的数据类型为float64。

一些例子

下面使用一些例子来说明数据类型的具体使用方式。

(1)数组标量类型

import numpy as np
dt1 = np.dtype(np.int32)   # 32位整型数
dt2 = np.dtype(np.complex128)   # 128位浮点类型复数
print(dt1)
print(dt2)

输出结果如下:

int32
complex128

(2)使用字符表示的数据类型

import numpy as np
dt3 = np.dtype('?')
dt4 = np.dtype('b')
dt5 = np.dtype('B')
dt6 = np.dtype('f')
dt7 = np.dtype('i8')
dt8 = np.dtype('f2')
print(dt3, dt4, dt5, dt6, dt7, dt8)

输出结果如下:

bool  int8  uint8  float32  int64  float16

在上面的例子中,'i8'表示8个字节的整型数,因此输出int64,即64位整数。同样,'f2'表示2个字节的浮点数,输出的float16表示16位浮点数(半精度)。

(3)带端序的字符

下面的例子中使用带端序的字符串定义数据类型。

import numpy as np
dt9= np.dtype('>B')
dt10 = np.dtype('<f')
dt11 = np.dtype('=i')
dt12 = np.dtype('i')

print(dt9, dt10, dt11, dt12)

上面代码的输出结果如下:

uint8 float32 int32 int32

在上面的例子中 '=i''i' 的效果是相同的,也是在未指定 '>' (大端方式) 和 '<' (小端方式)时的默认值,即依赖于硬件情况。

(4)创建结构化数据类型

下面例子中演示了结构化类型的使用方式。

import numpy as np
dt13 = np.dtype([('age', np.int8)])
print(dt13)

输出结果如下:

[('age', 'i1')]

(5)将结构化数据类型运用于ndarray

下面例子说明了如何将结构化类型运用于ndarray对象。

import numpy as np
dt13 = np.dtype([('age', np.int8)])
arr = np.array([(10,), (20,), (30,)], dtype=dt13)
print(arr)

输出结果如下:

[(10,) (20,) (30,)]

(6)访问结构化类型中的字段内容

下面例子给出了访问结构化类型中字段内容的方式。

import numpy as np
dt13 = np.dtype([('age', np.int8)])
arr = np.array([(10,), (20,), (30,)], dtype=dt13)
print(arr['age'])

输出结果如下:

[10 20 30]

(7)一个更复杂点的结构化类型

下面例子中定义了一个名为student的结构化数据类型,包含一个字符串类型的name字段,整型的age字段和float类型的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)将复杂的结构化类型运用于ndarray对象

下面的例子将上例中定义的student结构化类型运用于数组定义中,并将定义的数组进行输出。

import numpy as np
student = np.dtype([('name', 'S20'), ('age', 'i1'), ('marks', 'f4')])
arr = np.array([('XiaoMing', 21, 85), ('FangHua', 18, 95)], dtype=student)
print(arr)

输出结果如下:

[(b'XiaoMing', 21, 85.) (b'FangHua', 18, 95.)]

微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。

个人成长离不开各位的关注,你的关注就是我继续前行的动力。

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
愿您的精彩评论引起共鸣,带来思考和价值。
用户名: 查看更多评论
分 值:100分 90分 80分 70分 60分 40分 20分
内 容:
验证码:
关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图
本站部分内容来自互联网,如有侵权,请来信告之,谢谢!
Copyright © 2007-2024 biye5u.com. All Rights Reserved.