购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.5 机器学习Python基础

Python作为当下最热门的编程语言,具有简单易学、功能强大、丰富的类库,是数据挖掘、科学计算、图像处理、人工智能的首选开发语言。本节主要讲解Python开发环境、基本语法、列表、元组等常见的对象。

1.5.1 Python开发环境

Python开发环境有PyCharm、Anaconda等,其中Anaconda包含了Python常用的库,自带有Jupyter NoteBook、Spider开发工具,且具有强大的版本管理功能,对不同版本的工具包的安装有很好的支持。本书推荐安装Anaconda 3和PyCharm。Spider、PyCharm开发环境如图1-11、图1-12所示。

图1-11 Spider开发环境

图1-12 PyCharm开发环境

1.5.2 Python基本语法

与C++、Java一样,Python是一种面向对象的程序设计语言,拥有int、float、byte、bool等基本数据类型,以及list(列表)、tuple(元组)、dict(字典)等功能强大、使用灵活的序列类型。Python的语法规则有很多与Java、C++相似的地方,也有语法格式上的细小差别。

在Python语言中,不需要像Java、C++、C语言那样,在使用变量前必须定义该变量名,而是可以直接使用。Python根据赋值确定该变量的类型。

程序运行结果如下:

在Python语言中,有严格的代码缩进规定,同一层次的代码缩进必须一致,Python通过代码缩进来区分代码段的层次关系。对于选择结构、循环结构、函数定义、类定义及with语句块等结构,行尾的冒号和缩进表示下一个代码段的开始,缩进结束表示代码段的结束。同一个代码段同一层次的代码段缩进量必须相同。

(1)range()函数的作用是返回一个迭代对象,其语法格式如下:

其中,start表示开始的计数值,默认是从0开始。例如,range(5)等价于range(0,5);stop表示结束的计数值,但不包括stop自身。例如,range(0,5)表示[0,1,2,3,4];step表示步长,默认为1。例如,range(0,5)与range(0,5,1)等价。

(2)in是成员测试运算符,用于测试一个对象是否是另一个对象中的元素。例如:

程序运行结果如下:

(3)map()函数根据提供的函数对指定序列进行映射,其语法格式如下:

其中,参数function表示函数,参数iterable表示序列,可以为多个序列。该函数的作用是将序列作用于function上,即序列中每一个元素调用function函数,返回由返回值构成的新列表。例如:

程序运行结果如下:

其中,lambda i:i**2为匿名函数。Python使用Lambda来创建匿名函数。

程序运行结果如下:

1.5.3 Python列表、元组、字典、集合

为了数据处理方便,Python提供了列表、元组、字典、字符串、集合等类型,这些数据类型统称为序列。序列可以存放多个值,还提供了灵活的操作,例如,列表推导式、切片操作等。

1.列表

列表是一种可变序列,用于存储若干元素,其地址空间是连续的,类似于Java、C++中的数组。在Python中,在同一列表中的元素类型可以不相同,可同时包含整数、浮点数、布尔值、字符串等基本类型,也可以是列表、元组、字典、集合及自定义数据类型。例如:

程序运行结果如下:

通过下标可直接对列表中的元素进行访问,列表中第一个元素的下标为0。例如:

程序运行结果如下:

len()函数的作用是求列表的长度,在这里的返回值为6。

也可以动态往列表中添加、删除元素。添加的方法有:+、append()、extend()、insert()等,删除的方法有remove()、del、pop()等。例如:

程序运行结果如下:

代码中,x.insert(5,100)表示在列表x的第5个位置插入元素100,x.pop()表示将列表x中的最后一个元素删除。

Python与Java、C++语言最大的区别就是序列的切片操作,列表、元组、字符串、range对象都支持切片操作。切片由两个冒号分隔的3个数字组成,其语法格式为:

start表示切片的开始位置,stop表示切片的结束位置,但不包含该结束位置,step表示步长(默认为1),当步长省略时,最后一个冒号也可以省略。例如:

程序运行结果如下:

当步长为负数时,表示从右往左切片。

在数据处理过程中,经常会遇到嵌套列表,如果要取嵌套列表中的某一行元素或某一列元素,则需要列表推导式。例如:

程序运行结果如下:

列表推导式的语法格式为:

2.元组

元组与列表类似,其区别在于元组是不可变的序列。列表支持元素引用,但不支持修改、增加与删除操作。

程序运行结果如下:

zip()函数可将多个可迭代对象按照相应位置上的元素组合为元组,然后返回由这些元组组成的zip对象。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。与列表类似,若对多个元素操作,可采用生成器表达式。例如:

程序运行结果如下:

3.字典

字典是由若干“键-值”对构成的无序序列,字典中每个元素由两部分组成:键和值。其中,键的取值可以是任意不变的数据类型,如整数、浮点数、字符串、元组等,但不能是列表、字典、集合等可变的数据类型。并且,键中的元素不能相同,值可以相同。

程序运行结果如下:

字典的引用、添加和修改可通过“键”进行。如果字典中不存在相应的键,当为该键赋值时,就会将该键和值添加到字典中;如果字典中存在该键,则将用新的值替换原来的值。字典中的items()方法可返回字典中的“键-值”对,keys()方法返回的是字典中元素的“键”,values()方法返回的是字典中元素的“值”。

4.集合

集合也是一个无序的可变序列,同一个集合中的对象不能重复出现,这与数学中的集合具有同样的性质。集合运算包括并集、交集、差集和子集等。例如:

程序运行结果如下:

5.NumPy中的array

NumPy是一个功能强大、非常高效的数值运算包,在数据分析和机器学习领域被广泛使用。其中,使用最多的是array数组。Array中提供了很多常用的操作,可大幅提高程序开发效率,同时,使用array编写的程序运行效率要比使用list写出的程序高出很多。

list与和NumPy中的数组array形式上很类似,但本质上有很多不同。同一个列表可存放不同类型的数据,而同一个array数组中存放的数据类型必须全部相同。对于使用列表和array数组存储的矩阵,如果想要取出同一列的元素,对于列表,需要使用列表推导式才能完成;对于array,直接使用切片即可。例如:

如果要获取二维数组中某一行的均值或某一列的均值,可使用means()函数实现,其语法格式如下:

其中,a为数组名,axis为计算均值方向上的轴,假设a为m×n的矩阵,当axis=0时,求各列的平均值,返回1×n的矩阵;当axis=1时,求各行的平均值,返回m×1的矩阵;当axis没有赋值时,对m×n个数求平均值,返回一个浮点数。

程序运行结果如下:

还可以使用mat()函数表示矩阵,求均值方法如下:

程序运行结果如下:

有时,需要将矩阵转换为数组,可通过以下方法转换:

程序运行结果如下:

求矩阵中非零元素的行号和列号:

程序运行结果如下: Igh76bD6pnQrU9cCH7/5x148hsPMudxBWi4Ir8YttLMgIBYzEfniW+T35JjmrJfG

点击中间区域
呼出菜单
上一章
目录
下一章
×