Python语言中只定义了特定数据类的一种类型 比如只有一种整数类型 一种浮点类型等 。在不需要关注计算机中数据表示方式的普通应用程序中 这样做很方便。但是 对于科学计算来说 我们需要更加精确的控制类型。
在NumPy中 引入了24种新的Python scalar类型用于更加准确的描述数据。这些类型都是可以直接在NumPy中的数组中使用的 所以也叫Array scalar类型。
本文将会详细讲解这24种scalar类型。
scalar类型的层次结构先看一个张图 看下scalar类型的层次结构
上面实线方框括起来的 就是scalar类型。 这些标量类型 都可以通过 np.type来访问 比如
In [130]: np.intc Out[130]: numpy.int32
细心的小伙伴可能要问了 这不对呀 实线方框括起来的只有22中类型 还有两个类型是什么
还有两个是代表整数指针的 intp 和 uintp 。
注意 array scalars 类型是不可变的。
我们可以isinstance来对这些数组标量来进行层次结构的检测。
例如 如果val是数组标量对象 则isinstance val np.generic 将返回True。如果val是复数值类型 则isinstance val np.complexfloating 将返回True。
内置Scalar类型我们用下面的表来展示内置的Scalar类型和与他们相对应的C类型或者Python类型。最后一列的字符代码是类型的字符表示 在有些情况比如构建dtype中会使用到。
boolean类型描述字符代码bool_compatible: Python bool ? bool88 bitsIntegers类型描述字符代码bytecompatible: C char b shortcompatible: C short h intccompatible: C int i int_compatible: Python int l longlongcompatible: C long long q intplarge enough to fit a pointer p int88 bitsint1616 bitsint3232 bitsint6464 bitsUnsigned integers类型描述字符代码ubytecompatible: C unsigned char B ushortcompatible: C unsigned short H uintccompatible: C unsigned int I uintcompatible: Python int L ulonglongcompatible: C long long Q uintplarge enough to fit a pointer P uint88 bitsuint1616 bitsuint3232 bitsuint6464 bitsFloating-point numbers类型描述字符代码half e singlecompatible: C float f doublecompatible: C doublefloat_compatible: Python float d longfloatcompatible: C long float g float1616 bitsfloat3232 bitsfloat6464 bitsfloat9696 bits, platform?float128128 bits, platform?Complex floating-point numbers类型描述字符代码csingle F complex_compatible: Python complex D clongfloat G complex64two 32-bit floatscomplex128two 64-bit floatscomplex192two 96-bit floats, platform?complex256two 128-bit floats, platform?Python 对象类型描述字符代码object_any Python object O对于数组中的对象类型object_来说 存储的数据其实是Python对象的引用 所以说他们的对象类型必须一致。
虽然存储的是引用 但是在取值访问的时候 返回的就是对象本身。
可以看到对于数字类型来说 int,uint,float,complex,后面可以跟上具体的数组 表示特定的长度。
intp 和 uintp 是两个指向整数的指针。
有些类型和Python自带的类型基本上是等价的 事实上这些类型就是继承自Python自带的类型
Array scalar typeRelated Python typeint_IntType (Python 2 only)float_FloatTypecomplex_ComplexTypebytes_BytesTypeunicode_UnicodeType有一个特例就是bool_ 它和Python的 BooleanType 非常类似 但并不是继承自BooleanType。因为Python的BooleanType 是不允许被继承的。并且两者底层的数据存储长度也是不一样的。
虽然在Python中bool是int的子类。但是在NumPy中 bool_ 并不是 int_ 的子类 bool_ 甚至不是一个number 类型。
在Python 3 中 int_ 不再继承 Python3 中的int了 因为int不再是一个固定长度的整数。
NumPy 默认的数据类型是 float_。
可变长度数据类型下面的三种数据类型长度是可变的
类型描述字符代码bytes_compatible: Python bytes S# unicode_compatible: Python unicode/str U# void V#字符代码中的 # 表示的是数字。
上面描述的字符代码 为了和Python的其他模块进行兼容 比如struct 需要进行下面适当的修正
c - S1, b - B, 1 - b, s - h, w - H, 和 u - I.
本文已收录于 http://www.flydean.com/03-python-numpy-scalar/
最通俗的解读 最深刻的干货 最简洁的教程 众多你不知道的小技巧等你来发现
欢迎关注我的公众号:「程序那些事」,懂技术 更懂你
Topic Topic是一类消息的集合,是一种逻辑上的分区。为什么说是逻辑分区呢?因为...
本文转载自微信公众号「五分钟学大数据」,作者园陌 。转载本文请联系五分钟学大...
XSS 攻击 xxs 攻击英文全称是 Croess SiteScripting ,意思就是跨站脚本攻击。是...
本文转载自微信公众号「菜鸟飞呀飞」,作者刘进坤。转载本文请联系菜鸟飞呀飞公...
转载自 https://github.com/maemual/raft-zh_cn/blob/master/raft-zh_cn.md 1 介...
TOP云 (west.cn)3月2日消息,昨天早上sedo平台经纪人Frank Tillmanns在脸书上...
本文转载自微信公众号「HelloGitHub」,作者HelloGitHub。转载本文请联系HelloGi...
云服务器是否有图形界面? CentOS 6系列弹性云服务器如何安装图形化界面? CentO...
分布式应用运行时Dapr目前已经发布了1.1.0版本,阿里云也在积极地为Dapr贡献代码...
1.考历史的时候,我莫名的有一种沉重感,因为我就要改变历史了。 2.女人是书,...