NumPy之:标量scalars
简介
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 | '?' |
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自带的类型:
| 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的更多相关文章
- tensorflow-笔记02
TensorFlow扩展功能 自动求导.子图的执行.计算图控制流.队列/容器 1.TensorFlow自动求导 在深度学习乃至机器学习中,计算损失函数的梯度是最基本的需求,因此TensorFlow也原 ...
- 【深度学习系列】PaddlePaddle可视化之VisualDL
上篇文章我们讲了如何对模型进行可视化,用的keras手动绘图输出CNN训练的中途结果,本篇文章将讲述如何用PaddlePaddle新开源的VisualDL来进行可视化.在讲VisualDL之前,我们先 ...
- TensorFlow TensorBoard使用
摘要: 1.代码例子 2.主要功能内容: 1.代码例子 <TensorFlow实战>使用MLP处理Mnist数据集并TensorBoard上显示 2.主要功能 执行TensorBoard程 ...
- 学习笔记TF039:TensorBoard
首先向大家和<TensorFlow实战>的作者说句不好意思.我现在看的书是<TensorFlow实战>.但从TF024开始,我在学习笔记的参考资料里一直写的是<Tenso ...
- Tensorboard简介
Tensorflow官方推出了可视化工具Tensorboard,可以帮助我们实现以上功能,它可以将模型训练过程中的各种数据汇总起来存在自定义的路径与日志文件中,然后在指定的web端可视化地展现这些信息 ...
- [Python]基于CNN的MNIST手写数字识别
目录 一.背景介绍 1.1 卷积神经网络 1.2 深度学习框架 1.3 MNIST 数据集 二.方法和原理 2.1 部署网络模型 (1)权重初始化 (2)卷积和池化 (3)搭建卷积层1 (4)搭建卷积 ...
- numpy_basic3
矩陣 矩阵是numpy.matrix类类型的对象,该类继承自numpy.ndarray,任何针对多维数组的操作,对矩阵同样有效,但是作为子类矩阵又结合其自身的特点,做了必要的扩充,比如:乘法计算.求逆 ...
- TensorBoard:可视化学习
数据序列化 TensorBoard 通过读取 TensorFlow 的事件文件来运行.TensorFlow 的事件文件包括了你会在 TensorFlow 运行中涉及到的主要数据.下面是 TensorB ...
- Python与线性代数基本概念
在Python中使用Numpy创建向量: x = np.array([1, 2, 3, 4]) 创建3 x 3矩阵 B = np.array([[1, 2],[3, 4],[5, 6]]) Shape ...
随机推荐
- Bitter.NotifyOpenPaltform : HTTP 异步消息接收调度中心--开源贡献 之 一:简介
现在互联网的系统越来越趋向于复杂,从单体系统到现在的微服务体系演变.公司与公司的分工也越来越明确. 大数据公司提供了大数据服务 人脸识别公司提供了人脸识别服务 OCR 公司提供了专业的OCR 服务 车 ...
- wxWidgets源码分析(6) - 窗口关闭过程
目录 窗口关闭过程 调用流程 关闭文档 删除视图 删除文档对象 关闭Frame App清理 多文档窗口的关闭 多文档父窗口关闭 多文档子窗口关闭 窗口的正式删除 窗口关闭过程总结 如何手工删除view ...
- 使用.net5 创建具有身份验证和授权的Blazor应用程序
- Java RPC 框架 Solon 1.3.9 发布,更便利的支持
Solon 是一个微型的Java RPC开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,4000多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:RPC. ...
- Snort + Barbyard2 + Snorby环境搭建
1.环境 ubuntu-14.04.5 daq-2.0.7 Snort-2.9.15.1 Barbyard2 snorby Mysql Docker 2.架构 3.安装步骤 Ubuntu配置 如果是刚 ...
- 企业安全_监控Github关键字
目录 Hawkeye GSIL Hawkeye github: https://github.com/0xbug/Hawkeye 教程: https://my.oschina.net/adailinu ...
- .net 开源模板引擎jntemplate 教程:基础篇之语法
一.基本概念 上一篇我们简单的介绍了jntemplate并写了一个hello world(如果没有看过的,点击查看),本文将继续介绍jntemplate的模板语法. 我们在讲解语法前,首先要了解一下标 ...
- 前端学习 node 快速入门 系列 —— 初步认识 node
其他章节请看: 前端学习 node 快速入门 系列 初步认识 node node 是什么 node(或者称node.js)是 javaScript(以下简称js) 运行时的一个环境.不是一门语言. 以 ...
- Python3读取网页HTML代码,并保存在本地文件中
旧版Python中urllib模块内有一个urlopen方法可打开网页,但新版python中没有了,新版的urllib模块里面只有4个子模块(error,request,response,parse) ...
- FreeBSD 家图谱
https://cgit.freebsd.org/src/tree/share/misc/bsd-family-tree