numpy.dtype 类的实例用来描述数组项的组成形式。包括内存块字节数、数据类型等等。
在 NumPy 中描述标量数据的类型,有整数、浮点数等不同精度的几个内置标量类型。这些标量类型不是 dtype 类的实例,但是在需要使用 dtype 对象的地方,也可以使用这些标量。
结构化数据类型则是通过创建字段(包含其它数据类型的数据类型)类形成。每个字段都有一个名称,可以用来访问该字段。
数据类型对象描述了以下几个方面:
numpy.dtype(dtype, align=False, copy=False)
类用于创建一个数据类型对象。NumPy 数组的元素是由dtype描述的。数据类型对象可以由基本数字类型的不同组合构成。
每当在 NumPy 函数或方法中需要数据类型时,需要提供 dtype 对象或可以转换为 dtype 的对象。
数据类型对象的转换由dtype构造函数完成,可以转换为数据类型对象的内容有:
按原样使用.
使用默认的数据类型 float_.
24钟内置数组标量类型对象,都转换为关联的 dtype 对象;
示例:
# 包含 32 位 big-endia 整数的简单的数据类型。
>>>dt = np.dtype(np.int32)
>dtype('int32')
>>>dt = np.dtype(np.complex128)
>dtype('complex128')
类型 | 类型 |
---|---|
number, inexact, floating | float |
complexfloating | cfloat |
integer, signedinteger | int_ |
unsignedinteger | uint |
character | string |
generic, flexible | void |
Python内置类型在用于生成dtype对象时,等效于对应的数组标量类型:
类型 | 类型 |
---|---|
int | int_ |
bool | bool_ |
float | float_ |
complex | cfloat |
bytes | bytes_ |
str | unicode_ |
unicode | unicode_ |
buffer | void |
all others | object_ |
示例:
# 内置数据类型转换。
>>>dt = np.dtype(float)
>dtype('float64')
>>>dt = np.dtype(int)
>dtype('int32')
.dtype
的类型具有 dtype 属性的任何类型对象:将直接访问和使用该属性。该属性必须返回可转换为dtype对象的内容。
每个内置数据类型都有一个字符代码,用于唯一的标识,参考《NumPy中的24种不同类型的标量》。
示例:
# 使用字符代码定义数据类型对象。
>>>dt = np.dtype('?')
>dtype('bool')
>
>>>dt = np.dtype('>H')
>dtype('>u2')
格式说明:第一个字符用于指定数据的类型,后面的字符用于指定每个项目的字节数,如果第一个字符指定的是Unicode,则后面的字符标识字符数。
字符代码与指代的类型:
代码 | 类型 |
---|---|
‘?’ | boolean |
‘b’ | signed byte |
‘B’ | unsigned byte |
i | signed 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')
用于指定格式化数据类型的简写表示法,生成的数据类型的字段命名为 ‘f0’、‘f1’、···、‘fN’ 。
示例:
# 如果字段的形状需要多个维度,则需要写在数据类型前并在形状上加括号。
>>>dt = np.dtype("a3, 3u8, (2,4)U10")
>dtype([('f0', 'S3'), ('f1', ', (3,)), ('f2', ', (2, 4))])
可以使用 numpy.sctypeDict.keys() 中包含的任何字符串来生成数据类型对象。
示例:
>>>dt = np.dtype("uint32")
>dtype('uint')
(flexible_dtype, itemsize)
格式设定灵活数据类型(flexible_dtype, itemsize)
>>>dt = np.dtype("uint32")
>dtype('V10')
>>>dt = np.dtype(('U', 10))
>dtype(')
(fixed_dtype, shape)
格式为固定大小的数据类型设定形状(fixed_dtype, shape)
>>>dt = np.dtype(('i8', 3))
>dtype((', (3,)))
>>>dt = np.dtype(('i4, (2,3)f8, f4', (2,3)))
>dtype(([('f0', '), ('f1', ', (2, 3)), ('f2', ')], (2, 3)))
[(field_name, field_dtype, field_shape), ...]
格式[(field_name, field_dtype, field_shape), ...]
>>>dt = np.dtype([('big', '>i4'), ('little', ')])
>dtype([('big', '>i4'), ('little', ')])
{'names': ..., 'formats': ..., 'offsets': ..., 'titles': ..., 'itemsize': ...}
格式{'names': ..., 'formats': ..., 'offsets': ..., 'titles': ..., 'itemsize': ...}
>>>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})
{'field1': ..., 'field2': ..., ...}
格式{'field1': ..., 'field2': ..., ...}
示例:
>>>dt = np.dtype({'col1': ('U10', 0), 'col2': (np.float32, 10),
'col3': (int, 14)})
>dtype({'names':['col1','col2','col3'], 'formats':[',','], 'offsets':[0,10,14], 'itemsize':40})
(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', '), ('imag', ')]))
# 将32位整数解释为包含8位整数的子数组
>>>dt = np.dtype((np.int32, (np.int8, 4)))
>dtype('int32')