NumPy之:标量scalars

简介: NumPy之:标量scalars

目录



简介


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


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


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


scalar类型的层次结构


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


image.png


上面实线方框括起来的,就是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.


相关文章
|
25天前
|
机器学习/深度学习 数据挖掘 Python
线性代数运算在NumPy中的实现
【4月更文挑战第17天】本文介绍了NumPy在Python中实现线性代数运算的方法,包括使用`ndarray`创建向量和矩阵,矩阵的转置,矩阵乘法,计算特征值和特征向量,解线性方程组,以及计算行列式和逆矩阵。通过NumPy,科学家和数据分析师能更高效地进行科学计算和数据分析。
|
8月前
|
算法 数据安全/隐私保护 索引
【NumPy 数组过滤、NumPy 中的随机数、NumPy ufuncs】
【NumPy 数组过滤、NumPy 中的随机数、NumPy ufuncs】
|
8月前
|
算法 数据挖掘 计算机视觉
numpy ndarray嵌套ndarray浅显理解
numpy ndarray嵌套ndarray浅显理解
|
9月前
|
存储 Python
Numpy数值计算
Numpy数值计算
73 0
|
Python
Numpy中数组和矩阵操作的数学函数
Numpy 是一个强大的 Python 计算库。它提供了广泛的数学函数,可以对数组和矩阵执行各种操作。本文中将整理一些基本和常用的数学操作。
131 0
Numpy中数组和矩阵操作的数学函数
|
Python
Numpy向量和矩阵操作
NumPy是Python的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。本文介绍Numpy的向量和矩阵操作。
101 0
|
机器学习/深度学习 Serverless Python
Numpy中常用的10个矩阵操作示例(二)
Numpy中常用的10个矩阵操作示例
169 0
Numpy中常用的10个矩阵操作示例(二)
|
机器学习/深度学习 Python
Numpy中常用的10个矩阵操作示例(一)
Numpy中常用的10个矩阵操作示例
103 0
Numpy中常用的10个矩阵操作示例(一)
|
Python
numpy的randomn函数和正态分布
numpy的randomn函数和正态分布
164 0
|
数据处理 Python
NumPy之:ndarray中的函数
NumPy之:ndarray中的函数
NumPy之:ndarray中的函数