文章目录

  • 简介
  • scalar类型的层次结构
  • 内置Scalar类型
    • boolean
    • Integers
    • Unsigned integers
    • Floating-point numbers
    • Complex floating-point numbers
    • Python 对象
    • 可变长度数据类型

简介

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

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

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

scalar类型的层次结构

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

上面实线方框括起来的,就是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 '?'
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,后面可以跟上具体的数组,表示特定的长度。

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

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

Array scalar type Related 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相关推荐

  1. Numpy Scalars(标量)

    在Python中只有一个整型和和一个浮点型的数据类型,而在NumPy中则由24种不同的数据类型. import numpy as np np.float32(-1.1) == np.float64(- ...

  2. numpy 数组 ::_看起来不错,没有麻烦:使用NumPy进行数组编程

    numpy 数组 :: It is sometimes said that Python, compared to low-level languages such as C++, improves ...

  3. 【OpenCV 例程200篇】14. 图像与标量相加(cv2.add)

    [OpenCV 例程200篇]14. 图像与标量相加(cv2.add) 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 ...

  4. Python之数据分析(Numpy的矩阵相关操作、ufunc泛化函数对象)

    文章目录 一.矩阵相关操作 二.ufunc统一泛化函数 一.矩阵相关操作 1.三种构造矩阵的方法 np.matrix(二维容器, copy=True) 一参为可被解释为矩阵的二维容器,比如二维数组.二 ...

  5. 从入门到入土:机器学习part02|python|初步学习|numpy|Matplotlib

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  6. 怎么在python中输入矩阵_如何使用NumPy在Python中实现矩阵?

    矩阵被用作数学工具,在现实世界中有多种用途.在本文中,我们将按照以下顺序讨论Python中关于使用著名的NumPy库的矩阵的所有内容:什么是NumPy以及何时使用它?在NumPy 矩阵被用作数学工具, ...

  7. 人工智能(numpy)—— 数据分析

    一.Numpy是什么? 1.Numrical Python,数值的Python,应用于数值分析领域的Python语言工具:         2.Numpy是一个开源的科学计算库:         3. ...

  8. DL-5 深度学习框架的对比

    在深度学习领域的五大巨头里,它们都各自力挺一种深度学习框架:像谷歌有自家的TensorFlow.Facebook有Torch.百度有Paddle Paddle.微软有CNTK.而亚马逊的AWS则有MX ...

  9. TensorFlow-深度学习笔记

    文章目录 教程 环境配置 安装Windows CPU版本tensorflow 安装CUDA.cuDNN 安装Windows GPU版本tensorflow 查看使用的是CPU还是GPU 深度学习介绍 ...

最新文章

  1. linux centos7 重启服务器报错 Run 'systemctl daemon-reload' to reload units
  2. 一起谈.NET技术,通过16道练习学习Linq和Lambda
  3. python 在Windows 下切换工作目录
  4. 企业即时通讯将成为未来企业竞争致胜的关键
  5. DFN-LOW算法---割点、桥、强连通分量
  6. linux用户登录失败,锁定用户
  7. Spring(16) 获得bean的id
  8. MySQL如何使用.sql后缀的文件
  9. 计算机学院支部委员会会议记录,第七周班长支书例会会议记录
  10. VBA操作WORD(二):替换字符(含空格、全角字符、换行符等)
  11. html5 的属性和方法,Qunee for HTML5 - 中文 : 常用属性与方法
  12. 福布斯发布区块链50强 这5家中国公司上榜
  13. python爬虫爬取微信公众号历史文章链接
  14. Unity-存档与读档
  15. 史上最全推广小程序实操方法
  16. 百面机器学习和百面深度学习-测试1
  17. 集合工具类 以及 几个小面试题(是我保存的)
  18. 达梦数据库——DM8安装操作及体系架构介绍
  19. python令人迷惑的duplicated和drop_duplicates()
  20. 新零售未来的发展趋势怎么样?

热门文章

  1. sscanf()函数的用法
  2. 编辑器之神VIM入门
  3. 15.枚举enum.rs
  4. 在VC中如何找到崩溃的源头
  5. 深入理解Java内存架构
  6. 这里有一份面筋请查收(五)
  7. Redis简介及安装
  8. Easy Tech:什么是MPEG-DASH协议
  9. 音视频领域或将开启”外卷“之路
  10. 新的Google Lyra音频编解码器对实时视频流意味着什么?