NumPy之:标量scalars

摘要:
在NumPy中,引入了24种新的Python标量类型,以更准确地描述数据。这些类型可以直接在NumPy中的数组中使用,因此它们也被称为Arrayscalar类型。本文将详细解释这24种标量。注意arrayscalars类型是不可变的。有些类型基本上等同于Python的内置类型。事实上,这些类型是从Python的内置类型继承的:ArrayscalartypeRelatedPython typeint_IntTypefloat_FloatTypecomplex_ComplexTypebytes_BytesTypeunicode_UnicodeType的一个特例是bool_,它与Python的布尔类型非常相似,但它没有从布尔类型继承。因为Python的BooleanType不允许继承。但在NumPy bool_Not int_子类中,bool_甚至不是数字类型。

目录

简介

Python语言中只定义了特定数据类的一种类型(比如只有一种整数类型,一种浮点类型等)。在不需要关注计算机中数据表示方式的普通应用程序中,这样做很方便。但是,对于科学计算来说,我们需要更加精确的控制类型。

在NumPy中,引入了24种新的Python scalar类型用于更加准确的描述数据。这些类型都是可以直接在NumPy中的数组中使用的,所以也叫Array scalar类型。

本文将会详细讲解这24种scalar类型。

scalar类型的层次结构

先看一个张图,看下scalar类型的层次结构:

NumPy之:标量scalars第1张

上面实线方框括起来的,就是scalar类型。 这些标量类型,都可以通过 np.type来访问,比如:

In [130]: np.intc
Out[130]: numpy.int32

细心的小伙伴可能要问了,这不对呀,实线方框括起来的只有22中类型,还有两个类型是什么?

还有两个是代表整数指针的 intpuintp

注意,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 bits

Integers

类型描述字符代码
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 bits
int1616 bits
int3232 bits
int6464 bits

Unsigned 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 bits
uint1616 bits
uint3232 bits
uint6464 bits

Floating-point numbers

类型描述字符代码
half'e'
singlecompatible: C float'f'
doublecompatible: C double
float_compatible: Python float'd'
longfloatcompatible: C long float'g'
float1616 bits
float3232 bits
float6464 bits
float9696 bits, platform?
float128128 bits, platform?

Complex floating-point numbers

类型描述字符代码
csingle'F'
complex_compatible: Python complex'D'
clongfloat'G'
complex64two 32-bit floats
complex128two 64-bit floats
complex192two 96-bit floats, platform?
complex256two 128-bit floats, platform?

Python 对象

类型描述字符代码
object_any Python object'O'

对于数组中的对象类型object_来说,存储的数据其实是Python对象的引用,所以说他们的对象类型必须一致。

虽然存储的是引用,但是在取值访问的时候,返回的就是对象本身。

可以看到对于数字类型来说,int,uint,float,complex,后面可以跟上具体的数组,表示特定的长度。

intpuintp 是两个指向整数的指针。

有些类型和Python自带的类型基本上是等价的,事实上这些类型就是继承自Python自带的类型:

Array scalar typeRelated Python type
int_IntType (Python 2 only)
float_FloatType
complex_ComplexType
bytes_BytesType
unicode_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/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

免责声明:文章转载自《NumPy之:标量scalars》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇安装window下的redis,redis可视化管理工具(Redis Desktop Manager)安装,基础使用,实例化项目员工想变股东需具备以下条件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Python】批量查询-提取站长之家IP批量查询的结果加强版本v3.0

1、工具说明 写报告的时候为了细致性,要把IP地址对应的地区给整理出来。500多条IP地址找出对应地区复制粘贴到报告里整了一个上午。 为了下次更好的完成这项重复性很高的工作,所以写了这个小的脚本。 某个项目每次改需求都是这么突然。 应 XX 每天要求各种省份域名统计,再加强下Domain to IP to 地区的脚本。 Domain2ip2locality...

python字典实现按照自定义顺序排序

还是对于python字典理解不透彻,试图通过sort来给python的key指定顺序,几经试验,仍然得不到想要的效果,后来一想,python的字典不是本来就无序的么? 老王python的文章里这样写:(链接http://www.cnpythoner.com/post/62.html) 如果把python列表做为一种有序的对象集合类型的话,那python字典...

pytest文档40-pytest.ini配置用例查找规则(面试题)

前言 面试题:pytest如何执行不是test开头的用例?如执行 xxx_*.py这种文件的用例。 pytest.ini 配置文件可以修改用例的匹配规则。 pytest命令行参数 cmd打开输入pytest -h 查看命令行参数找到 [pytest] ini-options python_files (args) 匹配 python 用例文件, 如tes...

[Kotlin参考]一、总览-(4)Kotlin原生

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(let_us_code)➤博主域名:https://www.zengqiang.org➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/streng...

ubuntu安装python3.6

ubuntu16.04自带python2.7和python3.5, 若需安装python 3.6: 先是sudo apt-install python3.6,报错:找不到python3.6安装包。 Reading package lists... Done Building dependency tree Reading state info...

【docxtpl】python生成word2

docxtpl 的简介 docxtpl 的作者开发出它的原因主要是python-docx擅长创建word文档,却不擅长修改。 对于docxtpl来说,使用MicrosoftWord编辑文档时,直接在文档中插入类似于Jinja2的标记。将文档保存为.docx文件(XML格式):它将是.docx模板文件。 然后使用docxtpl加载这个.docx模板,按照...