如需学习Python基础,请查看一天入门Python系列https://blog.csdn.net/day_and_night_2017/category_8729957.html
numpy基础numpy是基于python的一套数学计算库,具有丰富的矩阵运算相关的api, 为深度学习提供便利的计算工具。
numpy导入import numpy as np
使用import导入numpy,并指定别名np
生成数组(一维向量)x = np.array([1, 2, 3])
numpy使用ndarray表示数组。
>>> x = np.array([1.0, 2.0, 3.0]) >>> print(x) [ 1. 2. 3.] >>> type(x)
向量与向量的基础运算tips:我们一般把一维数组称为向量;把二维数组称为矩阵;三维以上的数组称为张量。
向量之间可以进行对应位置元素的基础运算:
>>> 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 - y array([ -1., -2., -3.]) >>> x * y # element-wise product array([ 2., 8., 18.]) >>> x / y array([ 0.5, 0.5, 0.5])
当两个向量的长度一致时,均可以进行这种运算,当出现不一致时,会报错。
向量与标量的运算向量与标量进行计算时,相当于向量的每个元素与标量之间进行计算:
>>> x = np.array([1.0, 2.0, 3.0]) >>> x / 2.0 array([ 0.5, 1. , 1.5])生成多维数组
numpy可以生成多维数组,例如:
>>> A = np.array([[1, 2], [3, 4]])
>>> print(A)
[[1 2]
[3 4]]
>>> A.shape
(2, 2)
>>> A.dtype
dtype('int64')
只要把多个一维向量叠放在一起,就构成了二维矩阵。
ndarray有两个常用的属性:
矩阵之间的运算shape: 获取张量的维数。
dtype: 获取数据元素的类型
矩阵之间的运算也是符合对应位置计算的原则的:
>>> B = np.array([[3, 0],[0, 6]]) >>> A + B array([[ 4, 2], [ 3, 10]]) >>> A * B array([[ 3, 0], [ 0, 24]])
矩阵与标量计算
矩阵与常量计算,依然是每个元素与标量进行计算的结果:
>>> print(A) [[1 2] [3 4]] >>> A * 10 array([[ 10, 20], [ 30, 40]])
这里无论是一维向量还是二维数组与标量之间进行计算的时候,都是采用“广播”的方式进行计算的。
广播广播是应用在标量与向量计算的场景中的,什么是广播呢?
在二维矩阵与标量10进行计算的时候,相当于在矩阵对应的位置上,标量扩展成了一个维数相同,元素值均为标量值的矩阵,然后对应位置进行计算,这就叫广播。
其实,矩阵与向量直接也存在着广播:
>>> A = np.array([[1, 2], [3, 4]]) >>> B = np.array([10, 20]) >>> A * B array([[ 10, 40], [ 30, 80]])
此处相当于将B向量按照A矩阵的格式,扩展成一个对应的矩阵,然后对应位置计算。
向量的随机读写向量底层还是数组,所以其读写方式与数组类似:
>>> X = np.array([[51, 55], [14, 19], [0, 4]]) >>> print(X) [[51 55] [14 19] [ 0 4]] >>> X[0] # 第0行 array([51, 55]) >>> X[0][1] # (0,1)的元素 55
首个索引从0开始,X[0]表示的是矩阵的第一行元素构成的一维数组(向量)
我们也可以for循环依次获取每一行:
>>> for row in X: ... print(row) ... [51 55] [14 19] [0 4]矩阵合并为一维数组
>>> X = X.flatten() # 将X转换为一维数组 >>> print(X) [51 55 14 19 0 4]
使用flatten可以将矩阵按照从上到下,从左到右的顺序合并为一维矩阵。
我们可以指定索引批量获取元素:
>>> X[np.array([0, 2, 4])] # 获取索引为0、 2、 4的元素 array([51, 14, 0])矩阵元素判断、过滤
对矩阵的操作,相当于对每个元素的操作:
>>> X > 15 array([ True, True, False, True, False, False], dtype=bool)
根据判断结果,过滤结果为True对应位置的元素
>>> X[X>15] array([51, 55, 19])



