当前位置: 首页 > 后端技术 > Python

NumPy:标量简介

时间:2023-03-26 14:12:59 Python

在Python语言中,只定义了一种特定数据类的类型(例如,只有一种整数类型,一种浮点类型等)。这在不需要关心数据在计算机中的表示方式的常见应用程序中很方便。然而,对于科学计算,我们需要更精确的控制类型。在NumPy中,引入了24种新的Python标量类型来更准确地描述数据。这些类型在NumPy中可以直接用在数组中,所以也被称为数组标量类型。本文将详细解释这24种标量类型。标量类型的层次结构先看一张图,看一下标量类型的层次结构:上面的实线框就是标量类型。这些标量类型可以通过np.type来访问,例如:In[130]:np.intcOut[130]:numpy.int32细心的朋友可能要问了,这个是错误的,是用实线框括起来的有只有22种,其他两种是什么?另外两个是代表整数指针的intp和uintp。请注意,数组标量类型是不可变的。我们可以使用isinstance来检查这些数组标量的层次结构。例如,如果val是数组标量对象,isinstance(val,np.generic)将返回True。如果val是复值类型,isinstance(val,np.complexfloating)将返回True。内置标量类型我们使用下表来显示内置标量类型及其对应的C类型或Python类型。最后一列的字符编码是类型的字符表示,在某些情况下会用到,比如构造dtype。boolean类型描述字符代码bool_compatible:Pythonbool'?'bool88bitsIntegers类型描述字符代码bytecompatible:Cchar'b'shortcompatible:Cshort'h'intccompatible:Cint'i'int_compatible:Pythonint'l'longlongcompatible:Clonglong'q'intplarge足以容纳指针'p'int88位int1616位int3232位int6464位无符号整数类型描述字符代码ubytecompatible:Cunsignedchar'B'ushortcompatible:Cunsignedshort'H'uintccompatible:Cunsignedint'I'uintcompatible:Pythonint'L'ulonglongcompatible:Clonglong'Q'uintplargeenoughtofitapointer'P'uint88bitsuint1616bitsuint3232bitsuint6464bits浮点数类型描述字符码half'e'singlecompatible:Cfloat'f'doublecompatible:Cdoublefloat_compatible:Pythonfloat'd'longfloatcompatible:Clongfloat'g'float1616bitsfloat3232bitsfloat6464bitsfloat9696bits,platform?float128128位,平台?typeComplexfloatings-pointdescriptioncharactercode''complex_compatible:Pythoncomplex'D'clongfloat'G'complex64two32位浮点数complex128two64位浮点数complex192two96位浮点数,平台?complex256two128位浮点数,平台?Python对象类型描述字符编码object_anyPython对象'O'对于数组中的对象类型object_,存储的Data实际上是对Python对象的引用,所以它们的对象类型必须一致。虽然存储了引用,但在访问值时,返回的是对象本身。可以看出,对于数字类型,int、uint、float、complex后面都可以跟一个具体的数组来表示具体的长度。intp和uintp是两个指向整数的指针。有些类型基本上等同于Python自带的类型。实际上,这些类型都是继承自Python自身的类型:Arrayscalartype相关的Python类型int_IntType(Python2only)float_FloatTypecomplex_ComplexTypebytes_BytesTypeunicode_UnicodeType有一个特例bool_,它与Python的BooleanType非常相似,但不是继承自BooleanType。因为Python的BooleanType是不允许继承的。并且两者的底层数据存储长度也不同。虽然bool在Python中是int的子类。但是bool_不是NumPy中int_的子类,bool_甚至不是数字类型。在Python3中,int_不再继承自Python3中的int,因为int不再是定长整数。NumPy的默认数据类型是float_。变长数据类型下面三种数据类型是长度可变的,类型说明字符编码bytes_compatible:Pythonbytes'S#'unicode_compatible:Pythonunicode/str'U#'void'V#'字符编码中的#表示数字.上述字符编码,为了兼容其他Python模块,如struct,需要更正如下:c->S1,b->B,1->b,s->h,w->H,Andu->I.本文已收录于http://www.flydean.com/03-python-numpy-scalar/最流行的解读,最深刻的干货,最简洁的教程,很多tips你不知道的等你来发现!欢迎关注我的公众号:《程序那些事儿》,懂技术,更懂你!