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

NumPy:数据类型介绍

时间:2023-03-26 13:24:50 Python

我们知道Python中有4种数值类型,分别是int、float、bool和complex。作为面向科学计算的NumPy,其数据类型更为丰富。今天我将详细解释NumPy中的数据类型。数组中的数据类型NumPy是用C语言实现的。我们可以将NumPy中数组中的数据类型与C语言中的数据类型进行比较:definednp.shortshortPlatform-definednp.ushortunsignedshortPlatform-definednp.intcintPlatform-definednp.uintcunsignedintPlatform-definednp.int_longPlatform-definednp.uintunsignedlongPlatform-definednp.longlonglonglongPlatform-definednp.ulonglongunsignedlonglongPlatform-definednp.half/np.float16Halfprecisionsignfloat:位,5位指数,10位mantissanp.singlefloat平台定义的单精度浮点数:通常是符号位,8位指数,23位mantissanp。通常为符号位,11位指数,52位mantissa.np.longdoublelongdoublePlatform-definedextended-precisionfloatnp.csinglefloatcomplexComplex,由两个单精度浮点数(实部和虚部)表示np.cddoubledoublecomplexComplex数,由两个双精度浮点数(实部和虚部)表示。np.clongdoublelongdoublecomplexComplex数,由两个扩展精度浮点数(实部和虚部)表示。我们在Ipython环境中随机查看以上类型到底是什么:importnumpyasnpIn[26]:np.byteOut[26]:numpy.int8In[27]:np.bool_Out[27]:numpy.bool_In[28]:np.ubyteOut[28]:numpy.uint8In[29]:np.shortOut[29]:numpy.int16In[30]:np.ushortOut[30]:numpy.uint16所以上面的数据类型,它的底层还是固定的-length数据类型,让我们看看有什么:9223372036854775807)np.uint8uint8_tUnsignedinteger(0to255)np.uint16uint16_tUnsignedinteger(0to65535)np.uint32uint32_tUnsignedinteger(0to4294967295)np.uint64uint64_tUnsignedinteger(0to18446744073709551615)np.intpintptr_tInteindexingused,for他与ssize_tnp.uintpuintptr_tInteger相同,大到足以容纳一个指针np.float32floatnp.float64/np.float_double)np.complex128/np.complex_doublecomplex请注意,这与内置python复合体的精度相匹配。所有这些类型都是dtype对象的实例。常用的基本类型有5种,分别是bool、int、uint、float和complex。类型后面的数字表示该类型占用的字节数。上表中有一些平台定义的数据类型。这些类型与平台有关,使用时要特别注意。这些dtype类型可以在创建数组时手动指定:>>>importnumpyasnp>>>x=np.float32(1.0)>>>x1.0>>>y=np.int_([1,2,4])>>>yarray([1,2,4])>>>z=np.arange(3,dtype=np.uint8)>>>zarray([0,1,2],dtype=uint8)由于历史原因和向后兼容,我们还可以在创建数组时指定字符格式的dtype。>>>np.array([1,2,3],dtype='f')array([1.,2.,3.],dtype=float32)上面的f代表float类型。类型转换如果想转换一个已有的数组类型,可以使用数组自带的astype方法,也可以调用np的强制转换方法:In[33]:z=np.arange(3,dtype=np.uint8)In[34]:zOut[34]:array([0,1,2],dtype=uint8)In[35]:z.astype(float)Out[35]:array([0.,1.,2.])In[36]:np.int8(z)Out[36]:array([0,1,2],dtype=int8)注意上面我们使用了float,Python会自动将float替换为np.float_,同样的简化格式还有int==np.int_,bool==np.bool_,complex==np.complex_。其他数据类型不能使用简化版。查看类型要查看数组的数据类型,可以使用内置的dtype属性:In[37]:z.dtypeOut[37]:dtype('uint8')作为一个对象,dtype也可以执行一些类型判断操作:>>>d=np.dtype(int)>>>ddtype('int32')>>>np.issubdtype(d,np.integer)True>>>np.issubdtype(d,np.floating)假数据溢出一般来表示,如果超出了数据的范围,就会报异常。比如我们有一个非常长的int值:In[38]:a=1000000000000000000000000000000000000000000000000000000000000000000000000000000In[39]:aOut[39]:1000000000000000000000000000000000000000000000000000000000000000000000000000000In[40]:np.int(1000000000000000000000000000000000000000000000000000000)Out[40]:1000000000000000000000000000000000000000000000000000000In[41]:np.int32(10000000000000000000000000000000000000000000000000000000)---------------------------------------------------------------------------OverflowErrorTraceback(最近调用最后)in()---->1np.int32(1000000000000000000000000000000000000000000000000000000)上面的数字太长,超出了int32的范围,会抛出异常。但是NumPy的一些操作,如果超出范围,不会报异常,而是正常范围。这时候需要注意:In[43]:np.power(100,8,dtype=np.int32)Out[43]:1874919424In[44]:np.power(100,8,dtype=np.int64)Out[44]:10000000000000000NumPy提供了两种方法来衡量int和float的范围,numpy.iinfo和numpy.finfo:In[45]:np.iinfo(int)Out[45]:iinfo(min=-9223372036854775808,max=9223372036854775807,dtype=int64)In[46]:np.iinfo(np.int32)Out[46]:iinfo(min=-2147483648,max=2147483647,dtype=int32)In[47]:np.iinfo(np.int64)Out[47]:iinfo(min=-9223372036854775808,max=9223372036854775807,dtype=int64)if64位如果int还是太小,可以用np.float64,float64可以用科学计数法,这样你可以获得更广泛的结果,但它的精度可能会降低。在[48]:np.power(100,100,dtype=np.int64)Out[48]:0In[49]:np.power(100,100,dtype=np.float64)Out[49]:1e+200本文已收录于http://www.flydean.com/02-python-numpy-datatype/最流行的解读,最深刻的干货,最简洁的教程,很多你不知道的小技巧等着你等你发现!欢迎关注我的公众号:《程序那些事儿》,懂技术,更懂你!

最新推荐
猜你喜欢