NumPy数据类型对象(dtype)的构造方式

 更新时间:2026年05月25日 08:59:33   作者:峡谷的小鱼  
这段文章详细介绍了NumPy中的`numpy.dtype`类及其应用用,涵盖数据类型对象的创建、属性及用示例,关键点包括:`numpy.dtype`类、数据类型对象、示例

一、数据类型对象

numpy.dtype 类的实例用来描述数组项的组成形式。包括内存块字节数、数据类型等等。

  • 在 NumPy 中描述标量数据的类型,有整数、浮点数等不同精度的几个内置标量类型。这些标量类型不是 dtype 类的实例,但是在需要使用 dtype 对象的地方,也可以使用这些标量。
  • 结构化数据类型则是通过创建字段(包含其它数据类型的数据类型)类形成。每个字段都有一个名称,可以用来访问该字段。

数据类型对象描述了以下几个方面:

  • 数据的类型(整型、浮点型、Python对象等);
  • 数据的大小(多少个字节);
  • 数据的顺序(little-endian or big-endian);
  • 如果数据类型是子数组,它的形状和数据类型是什么;
  • 如果数据类型对象是结构化数据类型,则是其它数据类型的集合;集合的每个元素包括(字段名称、字段数据类型,每个字段占用内存块的哪个部分);

二、numpy.dtype 类

1.numpy.dtype(dtype, align=False, copy=False)类

用于创建一个数据类型对象。NumPy 数组的元素是由dtype描述的。

数据类型对象可以由基本数字类型的不同组合构成。

2. 类的参数

  1. dtype: 要转换为的数据类型对象;
  2. align:bool, optional,如果为 true,填充字段使其类似 C 的结构体;
  3. copy:bool,optional,复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用;

3. 类的属性

  1. alignment:根据编译器此数据类型所需的对齐(字节);
  2. base:返回基本元素的数据类型;
  3. byteorder:指定此数据类型对象字节顺序的字符,<小端,>大端,|不适;
  4. char:21种不同内置类型中的每一种的唯一字符代码;
  5. descr:PEP3118接口描述了数据类型;
  6. fields:此数据类型定义命名字段字典;
  7. itemsize:此数据类型对象的元素大小;
  8. kind:此数据类型的字符代码;
  9. name:数据类型名称;
  10. name:字段名称组成的元组;
  11. str:此数据类型对象的数组协议类型字符串;

三、dtype数据类型对象构造

每当在 NumPy 函数或方法中需要数据类型时,需要提供 dtype 对象或可以转换为 dtype 的对象。

数据类型对象的转换由dtype构造函数完成,可以转换为数据类型对象的内容有:

1. dtype 对象

按原样使用.

2. None

使用默认的数据类型 float_.

3. Array-scalar 类型:

24钟内置数组标量类型对象,都转换为关联的 dtype 对象;

示例:

# 包含 32 位 big-endia 整数的简单的数据类型。
>>>dt = np.dtype(np.int32)
>dtype('int32')

>>>dt = np.dtype(np.complex128)
>dtype('complex128')

4. 泛型类型

泛型分层类型对象根据关联转换为相应的类型对象:

类型类型
number, inexact, floatingfloat
complexfloatingcfloat
integer, signedintegerint_
unsignedintegeruint
characterstring
generic, flexiblevoid

5. 内置Python类型

Python内置类型在用于生成dtype对象时,等效于对应的数组标量类型:

类型类型
intint_
boolbool_
floatfloat_
complexcfloat
bytesbytes_
strunicode_
unicodeunicode_
buffervoid
all othersobject_

示例:

# 内置数据类型转换。
>>>dt = np.dtype(float)
>dtype('float64')

>>>dt = np.dtype(int)
>dtype('int32')

6. 带有.dtype的类型

具有 dtype 属性的任何类型对象:将直接访问和使用该属性。

该属性必须返回可转换为dtype对象的内容。

7.单字符串(One-character strings)

每个内置数据类型都有一个字符代码,用于唯一的标识,参考《NumPy中的24种不同类型的标量》。

示例:

# 使用字符代码定义数据类型对象。
>>>dt = np.dtype('?')
>dtype('bool')
>
>>>dt = np.dtype('>H')
>dtype('>u2')

8. Array-protocol类型字符串

格式说明:第一个字符用于指定数据的类型,后面的字符用于指定每个项目的字节数,如果第一个字符指定的是Unicode,则后面的字符标识字符数。

字符代码与指代的类型:

代码类型
‘?’boolean
‘b’signed byte
‘B’unsigned byte
isigned intege
‘u’unsigned integer
‘f’floating-point
‘c’complex-floating point
‘m’timedelta
‘M’datetime
‘O’Python objects
‘S’, ‘a’zero-terminated bytes
‘U’Unicode string
‘V’raw data (void)

示例:

>>>dt = np.dtype('i4')
>dtype('int32')
>
>>>dt = np.dtype('c16')
>dtype('complex128')

>>>dt = np.dtype('a25')
>dtype('S25')

9. 带有逗号分隔字段的字符串

用于指定格式化数据类型的简写表示法,生成的数据类型的字段命名为 ‘f0’、‘f1’、···、‘fN’ 。 

示例:

# 如果字段的形状需要多个维度,则需要写在数据类型前并在形状上加括号。
>>>dt = np.dtype("a3, 3u8, (2,4)U10")
>dtype([('f0', 'S3'), ('f1', '<u8', (3,)), ('f2', '<U10', (2, 4))])

10. 类型字符串

可以使用 numpy.sctypeDict.keys() 中包含的任何字符串来生成数据类型对象。

示例:

>>>dt = np.dtype("uint32")
>dtype('uint')

11. 使用(flexible_dtype, itemsize)格式设定灵活数据类型

(flexible_dtype, itemsize)
  • flexible_dtype:灵活数据类型对象;
  • itemsize:所需项大小的整数

示例:

>>>dt = np.dtype("uint32")
>dtype('V10')

>>>dt = np.dtype(('U', 10))
>dtype('<U10')

12. 使用(fixed_dtype, shape)格式为固定大小的数据类型设定形状

(fixed_dtype, shape)
  • fixed_dtype:固定大小的数据类型;
  • shape:为整数,表示对应大小的一维数组;为元组,表示对应形状的子数组;

示例:

>>>dt = np.dtype(('i8', 3))
>dtype(('<i8', (3,)))

>>>dt = np.dtype(('i4, (2,3)f8, f4', (2,3)))
>dtype(([('f0', '<i4'), ('f1', '<f8', (2, 3)), ('f2', '<f4')], (2, 3)))

13. 使用[(field_name, field_dtype, field_shape), ...]格式

[(field_name, field_dtype, field_shape), ...]
  • field_name:字段名称;
  • field_dtype:数据类型;
  • field_shape:数组形状;

示例:

>>>dt = np.dtype([('big', '>i4'), ('little', '<i4')])
>dtype([('big', '>i4'), ('little', '<i4')])

14. 使用{'names': ..., 'formats': ..., 'offsets': ..., 'titles': ..., 'itemsize': ...}格式

{'names': ..., 'formats': ..., 'offsets': ..., 'titles': ..., 'itemsize': ...}
  • names:必选,字段名称列表;
  • formats:必选,数据类型列表,必须与字段名称列表等长;
  • offsets:可选,每个字段的字节偏移量的列表
  • titles:可选,标题列表;
  • itemsize:可选,设置dtype的总大小;

示例:

>>>dt = np.dtype({'names': ['r','b'], 'formats': ['u1', 'u1'],
                'offsets': [0, 2],
               'titles': ['Red pixel', 'Blue pixel']})
>dtype({'names':['r','b'], 'formats':['u1','u1'], 'offsets':[0,2], 'titles':['Red pixel','Blue pixel'], 'itemsize':3})

15. 使用{'field1': ..., 'field2': ..., ...}格式

{'field1': ..., 'field2': ..., ...}

示例:

>>>dt = np.dtype({'col1': ('U10', 0), 'col2': (np.float32, 10),
    'col3': (int, 14)})
>dtype({'names':['col1','col2','col3'], 'formats':['<U10','<f4','<i4'], 'offsets':[0,10,14], 'itemsize':40})

16. 使用(base_dtype, new_dtype)格式

这种方法是将 base_dtype 解释为结构化的dtype。 

示例:

# 将32位整数解释位两个16位整数
>>>dt = np.dtype((np.int32,{'real':(np.int16, 0),'imag':(np.int16, 2)}))
>dtype((numpy.int32, [('real', '<i2'), ('imag', '<i2')]))

# 将32位整数解释为包含8位整数的子数组
>>>dt = np.dtype((np.int32, (np.int8, 4)))
>dtype('int32')

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 玩转Python发短信的实现

    玩转Python发短信的实现

    用Python实现发短信功能,当监控到问题出现时,短信报警,使问题能得到及时的处理。当然,我相信,用Python发短信应用场景不止此一处,下面我们开始Python发短信的实现,感兴趣的朋友参考下吧
    2022-01-01
  • Django+zTree构建组织架构树的方法

    Django+zTree构建组织架构树的方法

    zTree是一个开源的依靠JQuery实现的多功能树插件,具有性能优异、配置灵活、功能强大的特点,这篇文章主要介绍了Django+zTree构建组织架构树,需要的朋友可以参考下
    2019-08-08
  • python random模块常用函数基础教程

    python random模块常用函数基础教程

    这篇文章主要为大家介绍了python random模块常用函数基础教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 如何在PyCharm中配置使用Anaconda环境

    如何在PyCharm中配置使用Anaconda环境

    这篇文章主要介绍了如何在PyCharm中配置使用Anaconda环境,图文讲解写的非常详细简单易懂,还不会的小伙伴快来看看吧
    2023-03-03
  • python对离散变量的one-hot编码方法

    python对离散变量的one-hot编码方法

    今天小编就为大家分享一篇python对离散变量的one-hot编码方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python网络编程学习笔记(三):socket网络服务器

    python网络编程学习笔记(三):socket网络服务器

    服务器和客户端程序很类似,上节学习了客户端程序,这一节将仔细学习一下利用socket建立TCP服务器和UDP服务器
    2014-06-06
  • Python实现自动化处理PDF文件的方法详解

    Python实现自动化处理PDF文件的方法详解

    这篇文章主要为大家详细介绍了如何使用Python完成简单的PDF文件处理操作,如PDF文件的批量合并、拆分、加密以及添加水印等,需要的可以参考一下
    2022-09-09
  • python使用Apriori算法进行关联性解析

    python使用Apriori算法进行关联性解析

    这篇文章主要为大家分享了python使用Apriori算法进行关联性的解析,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • python-leetcode求区间[M,N]内的所有素数的个数实现方式

    python-leetcode求区间[M,N]内的所有素数的个数实现方式

    这篇文章主要介绍了python-leetcode求区间[M,N]内的所有素数的个数实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Cython 三分钟入门教程

    Cython 三分钟入门教程

    根据一些我收到的反馈,大家似乎有点混淆——Cython是用来生成 C 扩展到而不是独立的程序的。所有的加速都是针对一个已经存在的 Python 应用的一个函数进行的。
    2009-09-09

最新评论