《手把手陪您学Python》50——数组的dtype属性

  • Post author:
  • Post category:python


在上一篇

《手把手陪您学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》46——NumPy介绍


《手把手陪您学Python》47——ndarray


《手把手陪您学Python》48——数组的生成方法1


《手把手陪您学Python》49——数组的shape属性


《手把手陪您学Python》系列文章入门阶段的篇目已经全部完成。

为更加清晰地展示Python入门阶段的知识体系,整理了如下的鱼骨图,以方便大家查阅。

图片

如要阅读相应篇目的内容,请关注公众号点击菜单选择,或点击下方链接直达。


《手把手陪您学Python》1——为什么要学Python?


《手把手陪您学Python》2——Python的安装


《手把手陪您学Python》3——PyCharm的安装和配置


《手把手陪您学Python》4——Hello World!


《手把手陪您学Python》5——Jupyter Notebook


《手把手陪您学Python》6——字符串的标识


《手把手陪您学Python》7——字符串的索引


《手把手陪您学Python》8——字符串的切片


《手把手陪您学Python》9——字符串的运算


《手把手陪您学Python》10——字符串的函数


《手把手陪您学Python》11——字符串的格式化输出


《手把手陪您学Python》12——数字


《手把手陪您学Python》13——运算


《手把手陪您学Python》14——交互式输入


《手把手陪您学Python》15——判断语句if


《手把手陪您学Python》16——循环语句while


《手把手陪您学Python》17——循环的终止


《手把手陪您学Python》18——循环语句for


《手把手陪您学Python》19——第一阶段小结


《手把手陪您学Python》20——列表


《手把手陪您学Python》21——元组


《手把手陪您学Python》22——字典


《手把手陪您学Python》23——内置序列函数


《手把手陪您学Python》24——集合


《手把手陪您学Python》25——列表推导式


《手把手陪您学Python》26——自定义函数


《手把手陪您学Python》27——自定义函数的参数


《手把手陪您学Python》28——自定义函数的返回值


《手把手陪您学Python》29——匿名函数


《手把手陪您学Python》30——模块


《手把手陪您学Python》31——文件的打开


《手把手陪您学Python》32——文件的读取


《手把手陪您学Python》33——文件的关闭


《手把手陪您学Python》34——文件的写入


《手把手陪您学Python》35——数据的存储


《手把手陪您学Python》36——错误和异常处理


《手把手陪您学Python》37——程序的重构


《手把手陪您学Python》38——第二阶段小结


《手把手陪您学Python》39——面向对象


《手把手陪您学Python》40——类的定义、属性与实例化


《手把手陪您学Python》41——类的方法与实例方法


《手把手陪您学Python》42——类的魔法方法


《手把手陪您学Python》43——类的继承


《手把手陪您学Python》44——类的导入


《手把手陪您学Python》45——Python入门完结篇

For Fans:关注“亦说Python”公众号,回复“手50”,即可免费下载本篇文章所用示例语句。


亦说Python——Python爱好者的学习分享园地



版权声明:本文为mnpy2019原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。