在上一篇
《手把手陪您学Python》49——数组的shape属性
中,我们对数组的“形状”及其表示方式有了更为深入的了解。
今天,我们将会继续学习数组的属性,但不是与数组“形状”有关的属性了,而是与数组数据类型有关的dtype属性。
1、数据类型
对于“数据类型”这个字眼我们并不陌生,它指的就是数据的大类或者说Python的对象。
在入门阶段,我们学习的数字、字符串、布尔值、列表、元组、集合、字典,以及我们刚刚学习的数组,都是不同的数字类型。
其中,数字还可以分为整型、浮点型,甚至可以根据数位和精度再进行细分。
下表列举了Python中的一些数据类型,但主要是用于展示。特别是对于初学阶段的我们来说,只需要知道int、float、bool、string等数据类型就可以了。
等到我们需要在硬盘或者内存进行更深入的读取操作时,再了解这些与存储相关的数位以及精度等数据类型。
名称 |
描述 |
bool_ |
布尔型数据类型(True 或者 False) |
int_ |
默认的整数类型(类似于 C 语言中的 long,int32 或 int64) |
intc |
与 C 的 int 类型一样,一般是 int32 或 int 64 |
intp |
用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64) |
int8 |
字节(-128 to 127) |
int16 |
整数(-32768 to 32767) |
int32 |
整数(-2147483648 to 2147483647) |
int64 |
整数(-9223372036854775808 to 9223372036854775807) |
uint8 |
无符号整数(0 to 255) |
uint16 |
无符号整数(0 to 65535) |
uint32 |
无符号整数(0 to 4294967295) |
uint64 |
无符号整数(0 to 18446744073709551615) |
float_ |
float64 类型的简写 |
float16 |
半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位 |
float32 |
单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位 |
float64 |
双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位 |
complex_ |
complex128 类型的简写,即 128 位复数 |
complex64 |
复数,表示双 32 位浮点数(实数部分和虚数部分) |
complex128 |
复数,表示双 64 位浮点数(实数部分和虚数部分) |
unicode_ |
修正的Unicode类型,例如,生成一个长度为10的Unicode类型,使用“U10” |
注:转自菜鸟教程。
2、dtype属性
NumPy要求数组中的每一个元素都具有相同的数据类型,因此,每一个数组都有且仅有一个数据类型,这个数据类型就是数组的dtype属性。
其实,更严谨地说,dtype也是一个对象,它包含了ndarray需要为某一种类型数据所申明的内存块信息,并用于与其他系统数据进行灵活交互。
但这个定义对我们来说太难理解了,我们就认为dtype就是数组的数据类型就好了,可能是整数、浮点数、布尔值或者字符串等等。
dtype和我们上节课所学的ndim属性很类似,都是数组的“类属性”,所以只要对实例进行类属性的引用就好了。
In [1]: import numpy as np
In [2]: data1 = [1, 2, 3, 4, 5, 6] # 整数
arr1 = np.array(data1)
arr1.dtype
Out[2]: dtype('int32')
In [3]: data2 = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] # 浮点数
arr2 = np.array(data2)
arr2.dtype
Out[3]: dtype('float64')
In [4]: data3 = [True, False, True, False, True, False ] # 布尔值
arr3 = np.array(data3)
arr3.dtype
Out[4]: dtype('bool')
In [5]: data4 = ['a', 'b', 'c', 'd', 'e', 'f'] # 字符串
arr4 = np.array(data4)
arr4.dtype
Out[5]: dtype('<U1')
最后一个字符串的数据类型可能不是很好理解,其中,第一个字符是字节序,< 表示小端,> 表示大端,| 表示平台的字节序;U是上表中的最后一行Unicode的意思;1代表长度字符串的长度。后面可能用的比较少,所以简单了解一下就行。
3、数据类型的转换
在入门阶段,我们曾经学习过数据类型的转换,也就是整数(int)、浮点数(float)、字符串(str)之间的类型转换,使用的方法是int()、float()、str()。大家可以通过点击链接直达
《手把手陪您学Python》12——数字
进行回顾。
数组的数据类型也可以转换,也同样是在整数(int)、浮点数(float)、字符串(str)之间进行类型的转换,使用的是astype方法。
需要注意的有两点:
一是将字符串转换为数字时,只有由表达数字含义的字符组成的字符串才能够进行转换;
二是将浮点数转换为整数时,小数点后面的部分会直接被删除,而不是四舍五入。
In [6]: data5 = ['1.2', '2.8', '3.7', '4.1', '5.3', '6.9'] # 数字组成的字符串
arr5 = np.array(data5)
arr5.dtype
Out[6]: dtype('<U3')
In [7]: arr6 = arr5.astype('float64') # 字符串转换为浮点数
arr6
Out[7]: array([1.2, 2.8, 3.7, 4.1, 5.3, 6.9])
In [8]: arr6.dtype
Out[8]: dtype('float64')
In [9]: arr7 = arr6.astype('int') # 浮点数转换为整数,小数点后的部分被删除
arr7
Out[9]: array([1, 2, 3, 4, 5, 6])
In [10]: arr7.dtype
Out[10]: dtype('int32')
In [11]: arr8 = arr7.astype('str')
arr8
Out[11]: array(['1', '2', '3', '4', '5', '6'], dtype='<U11')
以上就是对数组dtype属性以及数据类型转换方法的介绍。下一篇,我们将会利用数组的shape属性和dtype属性学习其他生成数组的方法,敬请关注。
感谢阅读本文!如有任何问题,欢迎留言,一起交流讨论^_^
要阅读《手把手陪您学Python》——NumPy系列文章的其他篇目,请关注公众号点击菜单选择,或点击下方链接直达。
《手把手陪您学Python》系列文章入门阶段的篇目已经全部完成。
为更加清晰地展示Python入门阶段的知识体系,整理了如下的鱼骨图,以方便大家查阅。
如要阅读相应篇目的内容,请关注公众号点击菜单选择,或点击下方链接直达。
《手把手陪您学Python》3——PyCharm的安装和配置
《手把手陪您学Python》5——Jupyter Notebook
For Fans:关注“亦说Python”公众号,回复“手50”,即可免费下载本篇文章所用示例语句。