Numpy模块
在深度学习的过程中经常会涉及到矩阵和数组的计算,用numpy会便捷很多,这里就简单介绍一些在深度学习中会用到的一些。(建议看一下莫烦python的教学视频)
1、导入numpy
1 >>> import numpy as np
Python 中使用 import语句来导入库。这里的 import numpy as np,直译的话就是“将 numpy作为 np导入”的意思。通过写成这样的形式,之后相关的方法均可以用np来调用。
2、生成Numpy数组
要生成NumPy数组,需要使用np.array()方法。 np.array()接收Python列表作为参数,生成NumPy数组( numpy.ndarray)。
1 >>> x = np.array([2.0, 4.0, 6.0]) 2 >>> print(x) 3 [ 2. 4. 6.] 4 >>> type(x) 5 <class 'numpy.ndarray'>
3、Numpy算术运算
1 >>> x = np.array([1.0, 2.0, 3.0]) 2 >>> y = np.array([2.0, 4.0, 6.0]) 3 >>> x + y # 对应元素的加法 4 array([ 3., 6., 9.]) 5 >>> x - y 6 array([ -1., -2., -3.]) 7 >>> x * y # element-wise product 8 array([ 2., 8., 18.]) 9 >>> x / y 10 array([ 0.5, 0.5, 0.5])
注意:数组x和数组y的个数必须是相同的(比如都是一维数组元素是3个),如果不相同就会报错
4、Numpy的N维数组
numpy数组(np.array)可以生成N维数组,数学中一维数组称为向量,二维数组称为矩阵,三维及以上称为“张量”。
1 >>> A = np.array([[1, 2], [3, 4]]) 2 >>> print(A) 3 [[1 2] 4 [3 4]]
矩阵的算术运算
1 >>> B = np.array([[3, 0],[0, 6]]) 2 >>> A + B 3 array([[ 4, 2], 4 [ 3, 10]]) 5 >>> A * B 6 array([[ 3, 0], 7 [ 0, 24]])
5、广播
Numpy中,形状不同的数组之间也可以进行运算,这个功能称为广播。这个功能在深度学习中会经常出现。
1 >>> A = np.array([[1, 2], [3, 4]]) 2 >>> A * 10 3 array([[ 10, 20], 4 [ 30, 40]])
这个例子中就是将标量10扩展成和矩阵相同的形状进行运算。
1 >>> A = np.array([[1, 2], [3, 4]]) 2 >>> B = np.array([10, 20]) 3 >>> A * B 4 array([[ 10, 40], 5 [ 30, 80]])
这个例子中一维数组B变成了和二维数组相同的形状,然后再以对应元素的方式进行计算。
综上,基于Numpy的广播功能,不同形状的数组之间也可以进行运算。
6、访问元素
元素的索引从0开始。对各个元素的访问可按如下方式进行。
1 >>> X = np.array([[51, 55], [14, 19], [0, 4]]) 2 >>> print(X) 3 [[51 55] 4 [14 19] 5 [ 0 4]] 6 >>> X[0] # 第0行 7 array([51, 55]) 8 >>> X[0][1] # (0,1)的元素 9 55
也可以使用 for语句访问各个元素。
>>> for row in X: ... print(row) ... [51 55] [14 19] [0 4]
除了前面介绍的索引操作, NumPy还可以使用数组访问各个元素。
1 >>> X = X.flatten() # 将X转换为一维数组 2 >>> print(X) 3 [51 55 14 19 0 4] 4 >>> X[np.array([0, 2, 4])] # 获取索引为0、 2、 4的元素 5 array([51, 14, 0])
运用这个标记法,可以获取满足一定条件的元素。例如,要从 X中抽出大于15的元素,可以写成如下形式。
1 >>> X > 15 2 array([ True, True, False, True, False, False], dtype=bool)#得到布尔型数组 3 >>> X[X>15]#括号中表示索引的条件,取出满足条件的数 4 array([51, 55, 19])