前面说过,NumPy中有多种数据类型,每种数据类型都是一个dtype(numpy.dtype)对象。今天我们将详细解释dtype对象。对于dtype的定义,先看dtype方法的定义:classnumpy.dtype(obj,align=False,copy=False)它的作用是将对象obj转为dtype类型的对象。它有两个可选参数:align——是否按照C编译器的结构输出格式对齐对象。Copy-是否复制对象,或对象的引用。dtype可以用来描述数据的类型(int、float、Python对象等),描述数据的大小、数据的字节顺序(littleendianorbigendian)等。可以转换的对象到dtype可以转换的obj对象有很多种类型。让我们一一解释dtype对象。如果obj对象本身是dtype对象,可以无缝转换。如果不传None,则默认为float_,这也是我们默认创建float类型数组的原因。数组标量类型内置数组标量可以转换为关联数据类型的对象。在上一篇文章中,我们谈到了什么是数组标量类型。数组标量类型是可以通过np.type访问的数据类型。例如:np.int32、np.complex128等我们再来看数组标量的转换:In[85]:np.dtype(np.int32)Out[85]:dtype('int32')In[86]:np.dtype(np.complex128)Out[86]:dtype('complex128')这些以np开头的内置数组标量类型可以参考我之前的文章《NumPy:数据类型》。请注意,数组标量不是dtype对象,尽管在许多情况下,只要需要dtype对象,就可以使用数组标量。泛型类型一些泛型类型的对象可以转换为对应的dtype类型:generictypeobjectdtypetypesnumber,inexact,floatingfloatcomplexfloatingcfloatinginteger,signedintegerint_unsignedintegeruintcharacterstringgeneric,flexiblevoidPython内置类型一些Python内置类型和数组标量类型是等价的,也可以是转换为dtype:Python类型dtypetypeintint_boolbool_floatfloat_complexcfloatbytesbytes_strstr_buffervoid(allothers)object_参见内置Python类型转换的例子:In[82]:np.dtype(float)Out[82]:dtype('float64')In[83]]:np.dtype(int)Out[83]:dtype('int64')In[84]:np.dtype(object)Out[84]:dtype('O')objectwith.dtypeattributeAnytypeobjectAs只要包含dtype属性,并且这个属性属于可以转换的范围,就可以转换为dtype。一个字符串对象对于每一种内置的数据类型都有对应的字符编码,我们也可以使用这些字符编码进行转换:In[134]:np.dtype('b')#byte,nativebyteorderOut[134]:dtype('int8')In[135]:np.dtype('>H')#big-endianunsignedshortOut[135]:dtype('>u2')In[136]:np.dtype('
