前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NumPy之:标量scalars

NumPy之:标量scalars

作者头像
程序那些事
发布2021-05-11 14:39:03
4000
发布2021-05-11 14:39:03
举报
文章被收录于专栏:程序那些事

简介

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

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

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

scalar类型的层次结构

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

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

代码语言:javascript
复制
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

'?'

bool8

8 bits

Integers

类型

描述

字符代码

byte

compatible: C char

'b'

short

compatible: C short

'h'

intc

compatible: C int

'i'

int_

compatible: Python int

'l'

longlong

compatible: C long long

'q'

intp

large enough to fit a pointer

'p'

int8

8 bits

int16

16 bits

int32

32 bits

int64

64 bits

Unsigned integers

类型

描述

字符代码

ubyte

compatible: C unsigned char

'B'

ushort

compatible: C unsigned short

'H'

uintc

compatible: C unsigned int

'I'

uint

compatible: Python int

'L'

ulonglong

compatible: C long long

'Q'

uintp

large enough to fit a pointer

'P'

uint8

8 bits

uint16

16 bits

uint32

32 bits

uint64

64 bits

Floating-point numbers

类型

描述

字符代码

half

'e'

single

compatible: C float

'f'

double

compatible: C double

float_

compatible: Python float

'd'

longfloat

compatible: C long float

'g'

float16

16 bits

float32

32 bits

float64

64 bits

float96

96 bits, platform?

float128

128 bits, platform?

Complex floating-point numbers

类型

描述

字符代码

csingle

'F'

complex_

compatible: Python complex

'D'

clongfloat

'G'

complex64

two 32-bit floats

complex128

two 64-bit floats

complex192

two 96-bit floats, platform?

complex256

two 128-bit floats, platform?

Python 对象

类型

描述

字符代码

object_

any Python object

'O'

对于数组中的对象类型object_来说,存储的数据其实是Python对象的引用,所以说他们的对象类型必须一致。 虽然存储的是引用,但是在取值访问的时候,返回的就是对象本身。

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

intp 和 uintp 是两个指向整数的指针。

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

代码语言:javascript
复制
IntType (Python 2 only)

有一个特例就是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.


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序那些事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • scalar类型的层次结构
  • 内置Scalar类型
    • boolean
      • Integers
        • Unsigned integers
          • Floating-point numbers
            • Complex floating-point numbers
              • Python 对象
                • 可变长度数据类型
                相关产品与服务
                数据保险箱
                数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档