机器学习之python基础(一)

  机器学习之python基础(一)




综述 

这一系列博客是记录我在学习python和机器学习的过程中的一些实践过程和体会,学习python时用到的参考书籍是《python学习手册》第四版,即《learning python》的中文第四版。学习机器学习时所用的主要参考书籍是《机器学习实战》,还参考了CSDN博客平台上博客名为zouxy09的部分博客文章(博客后面附有url链接),实现其中的各种算法所使用的程序语言是python,实验平台是Ubuntu14.04,所使用的python版本是2.7.6。如果有博友想要与我进行交流可以在博客后面留言,或者发邮件到我的邮箱zouchaobin@foxmail.com。由于python3.0以后的版本与python3.0之前的版本有较大改变,所以为了某些代码的兼容性(如print函数),也为了便于直接使用《python学习手册》中的源代码(这本书的源代码是基于python3.x的),我决定采用以下处理方式:

from __future__ import print_function
from __future__ import division

在每个代码文件的开头加入以上两行代码,这样的话就可以使用python3.x的print函数和除法运算了,这样便于将这些代码稍加修改就能移植到python3.x的平台上。




python核心数据类型


python程序可以分解为模块,语句,表达式以及对象,如下所示:
1,程序由模块构成
2,模块包含语句
3,语句包含表达式
4,表达式建立并处理对象

python程序中处理的每样东西都是一种对象,并且在真正使用这个对象之前我们甚至不用像C语言那样声明该对象,当给python的变量赋值的时候就创建了它。python的基本核心数据类型如下:
数字:

整数 1234,浮点数 3.1415,复数 3+4j,Decimal,Fraction

数字支持一般的数学运算,如加(+),乘(*),乘方(**),需要注意的是浮点数存在显示精度问题,比如3.1415*2直接输出可能是6.28300000004,而print(3.1415*2)结果是6.283。
除了表达式以外,和Python一起发布的还有一些常用的数学模块,使用 import 将模块导入到当前文件就可以直接使用(后面会有详细说明),此外还有更高级的数学工具,比如random函数用于产生随机数和做随机选择。

第三方开源扩展领域甚至包含了更多(矩阵和向量,NumPy),稍后部分我们会详细讨论。
字符串:
比如'spam',"guido's",b'a\xolc'等。
字符串用来记录文本信息,在python中作为一种序列,可以采用序列的操作。作为序列,字符串支持假设其中各个元素包含位置顺序的操作。例如可以利用len函数验证某一个字符串的长度并通过索引操作得到其各个元素,索引按照从刚最前面的偏移量进行编码(从0开始),如下所示:

除了正向索引,我们还可以反向索引,即从最后一个开始,并且一般来说负的索引号会简单地与字符串的长度相加,如下所示:

除了简单的索引,python还支持一种所谓的分片的操作,如下所示:

python还支持字符串的“运算操作”,如加(+),乘(*):
字符串具有不可变性,对字符串的加和乘运算都将产生新的字符串,而原字符串不变。
还有其他很多特性,在此只讨论到此,以后如果有用到更深的知识我们再讨论。
列表(list):
元素表示在方括号[ ]中:l=[123, 'love', 3.14]
python的列表对象是这个语言提供的最通用的序列(与C语言的数组有些相似,不过要强大得多,比如列表的类型没有固定类型的约束),是一个任意类型的对象的位置相关的有序集合,没有固定大小,即大小可变,可以通过对偏移量进行赋值以及其他各种列表操作的方法。我们也能对列表像字符串一样进行索引,切片等操作.

另外列表提供了一些列方法来扩大列表(append方法)和减小列表(pop方法或者del语句),还有其他的列表方法:任意位置插入元素(insert方法),按照值移除元素(remove方法),按照升序对列表进行排序(sort方法),对列表进行翻转(reverse方法)。实例如下:

列表还可以进行任意嵌套,列表提供的高级操作方法(列表解析表达式)提供了一种处理像矩阵这样结构的强大的工具,如下是取出矩阵的第二列(row[1]表示行的第一列,此处利用了for循环,若对for循环不熟悉请看后续章节)。
此处只是进行了简单的矩阵元素提取,若是想要进行更高级的矩阵运算,需要使用第三方库,如NumPy,使用起来也很方便。
列表中还有一些高级操作,此处按下不表。
字典(dictionary):
元素表示在大括号{ }中:D={'food':'tea', 'quantity':'4', 'color':'red'}

字典是一种完全不同于序列的东西,是一种映射(mapping),映射是一个其他对象的集合,但是它们是通过键而不是相对位置来存储的,映射没有严格的从左至右的顺序,只是简单地将键(key)映射到值(value)。字典是python核心对象集合中唯一的一种映射类型,也具有可变性,可以像列表一样随意增大减小。写法如下:

{‘key1’:‘value1’,'key2':'value2',......}

我们可以通过键值来索引字典和读取字典中对应该键的值,由于键没有严格的左右顺序,所以我们将字典打印出来的时候不一定以我们输入元素的顺序出现,但也不是随机的,它是在字典生成的时候确定的顺序,如下所示:


另一种穿件字典的方法是对一个新的字典的键赋值会创建该键:


字典也是可以嵌套的,如下所示:


利用for循环对键进行排序。如果字典中要强调某种顺序,则我们只能使用键的值“构造”一种顺序,然后使用列表的sort方法进行排序,再使用for循环进行输出:

from __future__ import print_function
from __future__ import division

D={'a':1, 'b':2, 'c':3}
print(D)

ks = list(D.keys())
print(ks[0:len(ks)])

ks.sort()
print(ks[0:len(ks)])

for key in ks:
    print(key, '=>', D[key])

运行结果如下:


对于字典的操作也还有很多高级方法,此处按下不表。

元组(tuple):
元素表示在圆括号( )中:T=(1,2,3,4)

元组对象在python中相当于是元素和大小不可改变的列表,它也是一种序列,但是具有不可变性,和字符串类似。元组支持人以类型,任意嵌套以及常见的序列操作。我们在平时的使用中元组没有列表使用得那么频繁,但是正是由于它的不可变性,它在某些要求数据值不能改变的特殊场合能够起到保护数据的作用,可以防止数据被意外修改。

元组中使用index()方法和count()方法来获得对应元素的索引号和在元组中出现的次数:


由于元组是不能修改的,所以任何试图修改元组的操作都会被提示错误:


元组中也还有许多高级的操作方法,此处按下不表。

文件:
文件对象是python代码对电脑上的外部文件的主要接口,但是它不同于其他核心对象类型,要创建一个文件对象需要调用内置的open函数以字符串的形式传递给它一个外部的文件名字以及指定处理模式,跟C语言有些相像。例如:
from __future__ import print_function
from __future__ import division

f=open('test.txt', 'w')
f.write('Hello\n')
f.write('everyone\n')
f.close()

f=open('test.txt')
text=f.read()
print(text)
f.close()
运行结果如下,并在同一工作目录下产生了test.txt文件:

此外文件操作也有许多高级用法。

以上就是python的核心数据类型,此外python还支持集合,编程单元和用户自定义的类型等其他类型。更多更全面的介绍请参考《python学习手册》第四版。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沙漏AI机器人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值