one 第一章
1.1 Python是什么
Python是一个简单、易读、易记的编程语言,而且是开源的,可以免费地自由使用。Python可以用类似英语的语法编写程序,编译起来也不费力,因此我们可以很轻松地使用Python。特别是对首次接触编程的人士来说,Python是最合适不过的语言。事实上,很多高校和大专院校的计算机课程均采用Python作为入门语言。Python是最适合数据科学领域的编程语言。而且,Python具有受众广的优秀品质,从初学者到专业人士都在使用。因此,为了完成本书的从零开始实现深度学习的目标,Python可以说是最合适的工具。1.2 Python的安装
Python有2.x和3.x的区别,现在使用的一般均为Python3.x。两个常用的库:NumPy是用于数值计算的库,提供了很多高级的数学算法和便利的数组(矩阵)操作方法。本书中将使用这些便利的方法来有效地促进深度学习的实现。Matplotlib是用来画图的库。使用Matplotlib能将实验结果可视化,并在视觉上确认深度学习运行期间的数据。1.3Python解释器
可以配置PyCharm进行编写。我对PyCharm的认识大概相当于Rstudio之对于R软件的作用。方便程序的编写、运行调试。在PyCharm界面左下角处点击"Python consolo"就会出来Python的交互页面。也相当于Python解释器的对话模型。1.3.1 基本运算
*表示乘法,/表示除法,**表示乘方(3**2是3的2次方)。另外,在Python 2.x中,整数除以整数的结果是整数,比如,7 ÷ 5的结果是1。但在Python 3.x中,整数除以整数的结果是小数(浮点数)。1.3.2 数据类型
编程中有数据类型(data type)这一概念。数据类型表示数据的性质,有整数、小数、字符串等类型。Python中的type()函数可以用来查看数据类型。1.3.3 变量
可以使用x或y等字母定义变量(variable)。此外,可以使用变量进行计算,也可以对变量赋值。Python是属于“动态类型语言”的编程语言,所谓动态,是指变量的类型是根据情况自动决定的。“#”是注释的意思,它后面的文字会被Python忽略。1.3.4 列表
除了单一的数值,还可以用列表(数组)汇总数据。元素的访问是通过a[0]这样的方式进行的。[]中的数字称为索引(下标),索引从0开始(索引0对应第一个元素)。此外,Python的列表提供了切片(slicing)这一便捷的标记法。使用切片不仅可以访问某个值,还可以访问列表的子列表(部分列表)。1.3.5 字典
列表根据索引,按照0, 1, 2, ...的顺序存储值,而字典则以键值对的形式存储数据。字典就像《新华字典》那样,将单词和它的含义对应着存储起来。1.3.6 布尔型
Python中有bool型。bool型取True或False中的一个值。针对bool型的运算符包括and、or和not (针对数值的运算符有+、-、*、/等,根据不同的数据类型使用不同的运算符)。1.3.7 if语句
根据不同的条件选择不同的处理分支时可以使用if/else语句。>>> hungry = True>>> if hungry:... print("I’m so hungry.")... I’m so hungry.>>> hungry = False>>> if hungry:... print("I’m so hungry.")... else:... print("I’m not hungry at all.")... print("I'm tired.")... I’m not hungry at all.I'm tired.
Python中的空白字符具有重要的意义。上面的if语句中,if hungry:下面的语句开头有4个空白字符。它是缩进的意思,表示当前面的条件(if hungry)成立时,此处的代码会被执行。这个缩进也可以用tab表示,Python中推荐使用空白字符。1.3.8 for 语句
进行循环处理时可以使用for语句,可以按顺序访问列表等数据集合中的各个元素。>>> for i in ["I","am","not","a","good","guy"]:... print(i)... Iamnotagoodguy
1.3.9 函数
可以将一连串的处理定义成函数 (function)。>>> def hello():... print("Hello World!")... hello()Hello World!
此外,函数可以取参数。>>> def hello(object):... print("Hello " + object + "!")...>>> hello("cat")Hello cat!
1.4 NumPy
>>> import numpy as np
Python中使用import语句来导入库。这里的import numpy as np,直译的话就是“将numpy作为np导入”的意思。通过写成这样的形式,之后NumPy相关的方法均可通过np来调用。要生成NumPy数组,需要使用np.array()方法。np.array()接收Python列表作为参数,生成NumPy数 组(numpy.ndarray)。>>> x = np.array([1.0, 2.0, 3.0])>>> print(x)[ 1. 2. 3.]>>> type(x)<class 'numpy.ndarray'>
下面是NumPy数组的算术运算的例子。>>> x = np.array([1.0, 2.0, 3.0])>>> y = np.array([2.0, 4.0, 6.0])>>> x + y # 对应元素的加法array([ 3., 6., 9.])>>> x - yarray([ -1., -2., -3.])>>> x * y # element-wise productarray([ 2., 8., 18.])>>> x / yarray([ 0.5, 0.5, 0.5])
这里需要注意的是,数组x和数组y的元素个数是相同的(两者均是元素个数为3的一维数组)。当x和y的元素个数相同时,可以对各个元素进行算术运算。如果元素个数不同,程序就会报错,所以元素个数保持一致非常重要。另外,“对应元素的”的英文是element-wise,比如“对应元素的乘法”就是element-wise product。NumPy数组不仅可以进行element-wise运算,也可以和单一的数值(标量)组合起来进行运算。此时,需要在NumPy数组的各个元素和标量之间进行运算。>>> x = np.array([1.0, 2.0, 3.0])>>> x / 2.0array([ 0.5, 1. , 1.5]
NumPy不仅可以生成一维数组(排成一列的数组),也可以生成多维数组。>>> A = np.array([[1, 2], [3, 4]])>>> print(A)[[1 2] [3 4]]>>> A.shape(2, 2)>>> A.dtypedtype('int64')
矩阵A的形状可以通过shape查看,矩阵元素的数据类型可以通过dtype查看。NumPy中,形状不同的数组之间也可以进行运算。之前的例子中,在2×2的矩阵A和标量10之间进行了乘法运算。在这个过程中,如图1-1所示,标量10被扩展成了2 × 2的形状,然后再与矩阵A进行乘法运算。这个巧妙的功能称为广播 (broadcast)。我们通过下面这个运算再来看一个广播的例子。>>> A = np.array([[1, 2], [3, 4]])>>> B = np.array([10, 20])>>> A * Barray([[ 10, 40], [ 30, 80]])
1.5 Matplotlib
在深度学习的实验中,图形的绘制和数据的可视化非常重要。Matplotlib是用于绘制图形的库,使用Matplotlib可以轻松地绘制图形和实现数据的可视化。这里,我们来介绍一下图形的绘制方法和图像的显示方法。可以使用matplotlib的pyplot模块绘制图形。话不多说,我们来看一个绘制sin函数曲线的例子。import numpy as npimport matplotlib.pyplot as plt# 生成数据x = np.arange(0, 6, 0.1) # 以0.1为单位,生成0到6的数据y = np.sin(x)# 绘制图形plt.plot(x, y)plt.show()
就会得到图1-3:
在刚才的sin函数的图形中,我们尝试追加cos函数的图形,并尝试使用pyplot的添加标题和x轴标签名等其他功能。import numpy as npimport matplotlib.pyplot as plt# 生成数据x = np.arange(0, 6, 0.1) # 以0.1为单位,生成0到6的数据y1 = np.sin(x)y2 = np.cos(x)# 绘制图形plt.plot(x, y1, label="sin")plt.plot(x, y2, linestyle = "--", label="cos") # 用虚线绘制plt.xlabel("x") # x轴标签plt.ylabel("y") # y轴标签plt.title('sin & cos') # 标题plt.legend()plt.show()
就会得到图1-4:
今天就到这里啦!
大家都要加油鸭!
春风不度玉门关,
我佛不渡铁憨憨。
雕栏玉砌应犹在,
点赞完了点在看。
- end -
图文源鱼书
公众号:一枝花满楼