Numpy数据类型
numpy是一个python扩展包,它可以为我们提供更精确的科学技术,更强大的数学能力。为此,numpy定义了比python更丰富的数据类型来达成目的。
数据类型
以上就是一系列Numpy中提供的数据类型。需要理解的是,Numpy中的数据类型,和python本身的数据类型是不同的。Numpy中的数据类型,实质是数据类型对象dtype的实例。
Numpy中的Ndarray对象可以帮助我们构建N维数组对象。我们知道,对于数组来说,最大特点是,对于给定长度的数组,其在内存中所占用的空间大小是预先分配的,并且,每个元素所占用的空间大小是相当的。
那么,Ndarray怎么计算每个元素所占用的空间大小呢?就是根据dtype。换句话说,dtype定义中,应该包含类型的名字,并且,能够明确该类型实例占用的内存空间大小。
另外,dtype中还表明了数据的字节顺序。什么是字节顺序呢?我们知道,对于机器来说,正常的人类语言是无法直接被识别或存储的。需要转换成二进制01代码。这种二进制01代码称为机器语言,也叫字节码。对于一个特定的正常语言,转换成一系列01代码后,可以正向存放,也可以逆向存放。低位放在最前,称之为小端法,高位放在最前,则称之为大端法。
在numpy,core包的multiarray_umath.py模块中,可以找到dtype类的定义。有兴趣的同学可以尝试阅读一下其源码。读源码其实是一种有效的学习编程的方式。
dtype类定义
Numpy数据类型的简单案例
案例一:numpy.bool_和bool有区别
numpy的bool_和bool
上面的demo不会报错,这容易让人误以为,bool可能是numpy中bool_的简写,事实上,二者是两个不同的对象。bool_是由numpy定义的,而bool则是由python标准库定义的。
额外补充一点关于python数据类型的内容。我们知道,python中,有一系列基本数据类型,如数字,字符串,列表,元组,字典,集合等。而又与之对应,创建了一系列对象,帮助使用,如int,float,complex,str,list,tuple,dict,set等。bool也是一个,只不过,查看源码你会发现,int,float等,都是以object为父类的,而bool,则是以int为父类的。这正是python一切皆对象的表现之一。
案例二:使用字符串码
字符串码可以帮助建立一个dtype对象实例,还可以同时指定其字节码顺序。字符串码一般比原数据类型的标识符要短。
比如说,int类型的字符串码为i,可以通过以下方式创建:
int类型的字符串码
我们发现,通过字符串码i,创建了一个int32,你也可以通过i3来创建int32,通过i1创建int8,通过i2创建int16,通过i4创建int64。规律就是i其实是int的首字母,后面的数字其实是字节的长度,8位是1个字节,16位是两个字节,32位是三个字节……
大部分的情况下是可以通过这种规律来帮助记忆的。事实上,用多了,自然也就记住了。常用列表如下:
字符串码
通过在字符串码前加大于或小于号来指定字节排序,小于代表小端法,大于代表大端法,如下:
指定排序
其实在大部分场景下,我们不需要关注字节的排序,这时候,直接通过np的对象来创建就好,这样也不用去记忆或查询字符串码了。