千锋 2019-12-28
矩阵计算库
numpy库的使用是sklearn库和opencv库的基础,主要用于矩阵的计算。
Numpy 的主要用途是以数组的形式进行数据操作。机器学习中大多数操作都是数学操作,而 Numpy 使这些操作变得简单
1.创建Numpy数组对象
Numpy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符。
包括 np.bool_ ,np.int32,np.float32等。
ndarray.ndim 秩,即轴的数量或维度的数量
ndarray.shape 数组的维度,对于矩阵,n行m列
ndarray.size 数组元素的总个数,相当于 .shape 中n*m的值
ndarray.dtype ndarray 对象的元素类型
例:
data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] a = np.array(data) #一维数组,20 个数 a = np.linspace(0,20, 20) #一维数组,将 0-20 等分为 20 个数字 a = np.arange(20) #简洁方式 b = a.reshape(4,5) #将一维数组 a 转换为维数(4,5)的数组 c = a.reshape(2,5,2) #将一维数组 a 转换为维数(2,5,2)的数组
2.访问数组
控制遍历顺序
for x in np.nditer(a, order=‘F‘): 列序优先; for x in np.nditer(a.T, order=‘C‘): 行序优先;
例:
a = np.arange(24) a = a.reshape(3,8) a[2,3] #提取数组 a 中行 2 列 3 的数值 a[2,3] = 100 #修改数组 a 行 2 列 3 的数值
a[1:3,3:7] #提取数组 a 中 1~2 行,3~6 列的子数组
**#[[11 12 13 14]** **# [20 20 21 22]]**
a[1:3,3:7] = np.zeros((2,4)) #将数组 a 中 1~2 行,3~6 列 的数值置换为 0
**#[[ 0 1 2 3 4 5 6 7]** **# [ 8 9 10 0 0 0 0 15]** **# [16 17 18 0 0 0 0 23]]**
a[[0,1],[0,2]] = -1 #将数组 a 中(0,0),(1,2)两个位置的数值置换为-1
**#[[-1 1 2 3 4 5 6 7]** **# [ 8 9 -1 0 0 0 0 15]** **# [16 17 18 0 0 0 0 23]]**
3.对数组进行切片与拼接
Numpy 数组可以像Python列表一样被索引,切片和迭代。
也可以在多维数组上做同样的操作,只需使用逗号分隔即可。
例:
a = np.arange(24) a.reshape(3,8) b = np.copy(a) a[0][0] = 100 c = np.hstack((a,b)) #沿 1 维,将 a,b 拼接成一个新数组 c = np.concatenate ((a,b), axis=1) #沿 1 维,将 a,b 拼接成一个新数组 #[[100, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7], #[ 8, 9, -1, 0, 0, 0, 0, 15, 8, 9, 10, 11, 12, 13, 14, 15], #[16, 17, 18, 0, 0, 0, 0, 23, 16, 17, 18, 19, 20, 21, 22, 23]]
4.对数组元素进行查找
例:
a[1:3,3:7] = np.zeros((2,4)) np.where(a==0) #获得符合条件的行列位置 #(array([1, 1, 1, 1, 2, 2, 2, 2]), array([3, 4, 5, 6, 3, 4, 5, 6])) #index b[np.where(a==0)] #数组 b 在对应符合条件 a 位置上的数值 #array([11, 12, 13, 14, 19, 20, 21, 22]) #value np.where(a == 0, 1, 0) #等于0的位置,输出 1;不等于0位置,输出0 #array([[0, 0, 0, 0, 0, 0, 0, 0], **# [0, 0, 0, 1, 1, 1, 1, 0],** **#[0, 0, 0, 1, 1, 1, 1, 0]])**
5.对数组进行数学计算和代数运算
例:
#[[ 0, 1, 2, 3, 4, 5, 6, 7], #[ 8, 9, 10, 11, 12, 13, 14, 15], #[16, 17, 18, 19, 20, 21, 22, 23]] np.sum(b,axis=0) #列求和 #array([24, 27, 30, 33, 36, 39, 42, 45]) np.sum(b,axis=1) #行求和 #array([ 28, 92, 156]) np.sum(b) #求和 #276
完毕!
技术交流群:887934385
什么是数组数组是一种线性表数据结构,它用一组连续的内存空间来存储一组具有相同类型的数据。典型的线性表有数组、链表、队列和栈。直接将第 k 位的数据搬移到数组元素最后,然后把新的元素直接放在第 k 位。