数据类型对象(dtype)

您所在的位置:网站首页 object数据类型 数据类型对象(dtype)

数据类型对象(dtype)

2023-07-18 11:03| 来源: 网络整理| 查看: 265

# 数据类型对象(dtype)

数据类型对象(numpy.dtypeopen in new window类的实例)描述了如何解释与数组项对应的固定大小的内存块中的字节。 它描述了数据的以下几个方面:

数据类型(整型、浮点型、Python对象等)。数据的大小(例如整数中有多少字节)。数据的顺序(little-endianopen in new window 或 big-endianopen in new window)。如果数据类型是结构化数据类型open in new window,则是其他数据类型的集合(例如,描述由整数和浮点数组成的数组项)。 结构的 “字段open in new window” 的名称是什么,通过这些名称可以访问它们。每个 字段open in new window 的数据类型是什么,以及每个字段占用内存块的哪一部分。如果数据类型是子数组,那么它的形状和数据类型是什么。

为了描述标量数据的类型,在NumPy中存在用于整数、浮点数等的各种精度的几个内置标量类型。 例如,通过 索引从数组中提取的项将是其类型是与数组的数据类型相关联的标量类型的 Python 对象。

请注意,标量类型不是 dtypeopen in new window 对象,即使在NumPy中需要数据类型规范时可以使用它们来代替dtype对象。

结构化数据类型是通过创建其字段open in new window包含其他数据类型的数据类型来形成的。 每个字段都有一个可以用来访问它的名称。 父数据类型应该有足够的大小来包含它的所有字段;父数据类型几乎总是基于void类型,该类型允许任意的项大小。 结构化数据类型还可以在其字段中包含嵌套的结构子数组数据类型。

最后,数据类型可以描述本身就是另一种数据类型的项的数组的项。然而,这些子数组必须具有固定的大小。

如果使用描述子数组的数据类型创建数组,则在创建数组时,子数组的维数将附加到数组的形状。 结构化类型字段中的子数组的行为有所不同,请参阅字段访问。

子数组总是具有 C-contiguous 的内存布局。

示例:

包含32位 big-endia 整数的简单数据类型:(有关构造的详细信息,请参阅指定和构造数据类型)

>>> dt = np.dtype('>i4') >>> dt.byteorder '>' >>> dt.itemsize 4 >>> dt.name 'int32' >>> dt.type is np.int32 True

对应的数组标量类型为 int32。

示例:

结构化数据类型,包含16个字符的字符串(在字段“name”中)和两个64位浮点数的子数组(在字段“grades”中):

>>> dt = np.dtype([('name', np.unicode_, 16), ('grades', np.float64, (2,))]) >>> dt['name'] dtype('|U16') >>> dt['grades'] dtype(('float64',(2,)))

此数据类型的数组的项包装在数组标量类型中,该数组标量类型也有两个字段:

>>> x = np.array([('Sarah', (8.0, 7.0)), ('John', (6.0, 7.0))], dtype=dt) >>> x[1] ('John', [6.0, 7.0]) >>> x[1]['grades'] array([ 6., 7.]) >>> type(x[1]) >>> type(x[1]['grades']) # 指定和构造数据类型

每当在NumPy函数或方法中需要数据类型时,都可以提供 dtypeopen in new window 对象或可以转换为 dtypeopen in new window 的对象。此类转换由dtype构造函数完成:

方法描述dtypeopen in new window(obj[, align, copy])创建数据类型对象。

可以转换为数据类型对象的内容如下:

dtypeopen in new window object

按原样使用。

None

默认数据类型:`float_``。

Array-scalar 类型

24个内置数组标量类型对象都转换为关联的数据类型对象。对于他们的子类也是如此。

请注意,并非所有数据类型信息都可以与type-object一起提供:例如,灵活数据类型的默认 itemsize 为 0,并且需要显式给定的大小才有用。

>>> dt = np.dtype(np.int32) # 32-bit integer >>> dt = np.dtype(np.complex128) # 128-bit complex floating-point number

泛型类型

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

类型类型number, inexact, floatopen in new windowingfloatcomplexfloatingcfloatinteger, signedintegerint_unsignedintegeruintcharacterstringgenericopen in new window, flexiblevoid

内置Python类型

几个python类型在用于生成 dtypeopen in new window 对象时等效于相应的数组标量:

类型类型intopen in new windowint_boolopen in new windowbool_floatopen in new windowfloat_complexopen in new windowcfloatbytesopen in new windowbytes_stropen in new windowbytes_ (Python2) 或者 unicode_ (Python3)unicodeunicode_buffervoid(all others)object_

请注意,str 指的是以 null 结尾的字节或Unicode字符串,具体取决于Python版本。 在同时面向Python 2和3的代码中,np.unicode_ 应该用作字符串的dtype。参见本页面的字符串类型说明。

示例:

>>> dt = np.dtype(float) # Python-compatible floating-point number >>> dt = np.dtype(int) # Python-compatible integer >>> dt = np.dtype(object) # Python object

带有 .dtype 的类型

具有 dtype 属性的任何类型对象:将直接访问和使用该属性。该属性必须返回可转换为dtype对象的内容。

可以转换几种类型的字符串。 可以在识别的字符串前面加上 '>' (big-endianopen in new window)、 'H') # big-endian unsigned short >>> dt = np.dtype('i4'), ('little', '



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3