【深度学习(4):NumPy数组库】

一.数组基础

导入Numpy时,通常给其一个别名"np",即 import numpy as np

1.1 数据类型

1.整数型数组和浮点型数组
在这里插入图片描述
注意,使用print输出Numpy数组后,元素之间没有逗号,有两个好处:
1.可以将之与Python列表区分开来
2.避免逗号和小数点之间的混淆

2.同化定理
一个人的力量无法改变改变全体,在实际操作中要注意:
1.往整数型数组里插入浮点数,该浮点数会自动被截断为整数
2.往浮点型数组里插入整数,该整数会自动升级为浮点数
在这里插入图片描述
3.共同改变定理
整数型数组和浮点型数组相互转换,规范的方法是使用.astype()方法
在这里插入图片描述
除了上述方法,只要满足共同改变定理,整数型数组和浮点型数组仍然可以相互转换,最常见的是整数型数组在运算过程中升级为浮点型数组
整数型数组很好升级,但浮点型数组在运算过程中一般不会降级
在这里插入图片描述

1.2 数据维度

1.2.1 一维数组与二维数组

不同维度的数组之间,从外形上的本质区别是
一维数组使用1层中括号表示
二维数组使用2层中括号表示
三维数组使用3层中括号表示
有些函数需要传入数组的形状参数,不同维度数组的形状参数为
一维数组的形状参数如:x或(x,)
二维数组的形状参数如:(x,y)
三维数组的形状参数如:(x,y,z)
现在以同一个序列进行举例
当数组有1层中括号,如[1,2,3],则其为一维数组,其形状是3或(3,)
当数组有2层中括号,如[[1,2,3]],则其为二维数组,其形状是(1,3)
当数组有3成中括号,如[[[1,2,3]]],则其为三维数组,其形状是(1,1,3)
这里用后面要讲的np.ones0函数进行演示,只因其刚好需要传入形状参数
在这里插入图片描述

1.2.2 不同维度数组之间的转换

一维数组转二维数组,还是二维数组转一维数组,均要使用的是数组重塑方达.reshape(),该方法需要传入重塑后的形状参数
未来将一维数组称为向量,二维数组成为矩阵
在这里插入图片描述

二.数组的创建

2.1 创建指定的数组

当明确知道数组的为一个元素的具体数值时,可以使用**np.array()**函数,将Python列表转化为Numpy数组
在这里插入图片描述

2.2 创建递增数组

递增数组使用**np.arange()**函数进行创建
在这里插入图片描述

2.3 创建同值数组

需要创建同值数组时,使用np.zeros()函数以及np.ones()函数
两个函数输出的并不是整数型数组,这可能是为了避免插进去的浮点数被阶段,所以将其设定为浮点型数组
在这里插入图片描述

2.4 创建随机数组

去要创建随机数组,可以使用**np.random()**系列函数
在这里插入图片描述

三.数组的索引

3.1 访问数组元素

与Python列表一致,访问Numpy数组元素时是用中括号,索引由0开始
访问向量
访问矩阵

3.2 花式索引

之前访问单个元素时,向量用arr[x],矩阵用arr[x,y].
逗号在矩阵里用于区分行与列,这一小节,逗号新增一个功能,且不会与矩阵里的逗号混淆
向量的花式索引
在这里插入图片描述
矩阵的花式索引
在这里插入图片描述
在这里插入图片描述

3.3 访问数组切片

向量的切片
与列表的切片相同
矩阵的切片
在这里插入图片描述
提取矩阵的行
提取矩阵的行时可以简写,但提取列的时候不能简写
在这里插入图片描述
提取矩阵的列
在这里插入图片描述

3.4 数组切片仅是视图

数组切片仅是试图
与Python列表Matlab不同,Numpy数组的切片仅仅是原数组的一个视图.换言之,Numpy切片不会创建新的变量,新数组更改原数组也会更改
备份切片为新变量
如果真的需要为切片创建新变量,使用**.copy()方法**
在这里插入图片描述

3.5 数组赋值仅是绑定

与Numpy数组的切片一样,Numpy数组完整的赋值给另一个数组,也只是绑定.换言之,Numpy数组之间的赋值并不会创建新的变量,新数组数值改变会导致原数组数值的改变
在这里插入图片描述
可将数组拷贝.copy()

四.数组的变形

4.1 数组的转置

数组的转置方法为**.T**只对矩阵有效,因此遇到向量要先将其转化为矩阵
向量的转置
在这里插入图片描述
矩阵的转置
在这里插入图片描述

4.2 数组的翻转

数组的翻转方法有两个:
一个是上下翻转np.flipud(),表示up-down
一个是左右翻转np.fliplr(),表示letf-right
其中,向量只能使用np.flipud(),在数学中向量不是横着排的,而是竖着排的
向量的翻转

**在这里插入图片描述**
矩阵的翻转
在这里插入图片描述

4.3 数组的重塑

想要重塑数组的形状,需要用到**.reshape()方法**
向量的变形
矩阵的变形

4.4 数组的拼接

.concatenate([arr1,arr2])
向量的拼接
两个向量拼接,将得到一个新的加长版向量
在这里插入图片描述矩阵的拼接
两个矩阵可以按不同的维度进行拼接,但拼接时必须注意维度的吻合
在这里插入图片描述

4.5 数组的分裂

向量的分裂
**np.split()**函数中,给出的第二个参数[2,8]表示在索引[2]和索引[8]的位置截断
在这里插入图片描述
矩阵的分裂
在这里插入图片描述

五.数组的运算

5.1 数组与系数之间的运算

Python基础中,常用的运算符与Numpy的运算符相同,数组和系数之间的运算是逐元素的运算
在这里插入图片描述
在这里插入图片描述

5.2 数组和数组之间的运算

同维度数组间的运算即对应元素之间的运算,这里仅以矩阵为例,向量与向量的操作与之相同
在这里插入图片描述
在这里乘法是遵循对应元素相乘的,可以称之为"逐元素乘积",那么如何实现线性代数中的"矩阵级乘法"呢?

5.3 广播

5.2是同形状数组之间的逐元素运算,本届讲解不通形状的数组之间的运算
仅讨论二维数组之内的情况,不同形状的数组之间的运算有以下规则:
1.如果是向量与矩阵之间做运算,向量自动升级为行矩阵
2.如果是某矩阵世行矩阵或列矩阵,则其被广播,以适配另一个矩阵的形状
向量被广播
当一个形状为(x,y)的矩阵与一个向量做运算时,要求该向量的形状必须为y,运算时向量会自动升级形状为(1,y)的行矩阵,该形状为(1,y)的行矩阵再自动被广播为形状为(x,y)的矩阵,这样就与矩阵的形状适配了
在这里插入图片描述
列矩阵被广播
当一个形状为(x,y)的矩阵与一个列矩阵做运算时,要求该列矩阵的形状必须为(x,1),改形状为(x,1)的列矩阵在自动被广播为形状为(x,y)的矩阵,这样就与另一个矩阵的形状适配了
在这里插入图片描述
行矩阵与列矩阵同时被广播
当一个矩阵的形状为(1,y),另一个矩阵的形状为(x,1),这两个矩阵做运算会自动广播为形状为(x,y)的矩阵
在这里插入图片描述

六.数组的函数

6.1 矩阵乘积

1.之前的乘法为"逐元素相乘",这里介绍线性代数中的矩阵乘积,本节只需要使用np.dot()函数
2.当矩阵乘积中混有向量时,根据需求,其可充当行矩阵,也可充当列矩阵,但混有向量时输出结果必为向量
向量和向量的乘积
(1,5)(5,1)->(1,1)
在这里插入图片描述
向量和矩阵的乘积
(1,5)
(5,3)->(1,3)
在这里插入图片描述
矩阵和向量的乘积
(3,5)*(5,1)->(3,1)
在这里插入图片描述
矩阵和矩阵的乘积
在这里插入图片描述

6.2 数学函数

Numpy设计了很多数学函数
np.abs() 绝对值函数
np.sin()/np.cos()/np.tan() 三角函数
np.exp(x) 指数函数:表示e的x次方
np.log(x)/np.log(10) 对数函数,log以10为底的x次方

6.3 聚合函数

1.求最大值
np.max(arr,axis = 0) 按维度一求最大值
np.max(arr,axis = 1) 按维度二求最大值
np.max(arr) 求整体最大值
2.求和函数
np.sum(arr,axis = 0) 按维度一求和
np.sum(arr,axis = 1) 按维度二求和
np.sum(arr) 求整体和
3.均值函数
np.mean(arr,axis = 0)
np.mean(arr,axis = 1)
np.mean(arr)

七.布尔型数组

除了整数型数组和浮点型数组,还有一种布尔型数组

7.1 创建布尔型数组

两种方法
将数组与系数作比较,以产生布尔型数组
在这里插入图片描述
将同维数组作比较,以产生布尔型数组
在这里插入图片描述
同时比较多个条件,Python中使用and,or,not.但Numpy中使用与,或,非为:&,|,~
在这里插入图片描述

7.2 布尔型数组中True的数量

1.np.sum()函数统计布尔型数组里True的个数
在这里插入图片描述
2.np.any()函数只要布尔型数组含有一个及其以上的True,就返回True
在这里插入图片描述
3.np.all()函数当布尔型数组里全是True,才返回True
在这里插入图片描述

7.3 布尔型数组作为掩码

若一个普通数组和一个布尔型数组的维度相同,可以将布尔型数组作为普通数组的掩码,这样可以对普通数组中的元素做筛选
示例1
筛选出数组中大于,等于或小于某个数字的元素
注意,这个矩阵进行掩码操作后,退化为了向量
在这里插入图片描述
示例2
在这里插入图片描述

7.4 满足条件的元素所在位置

假设有一个很长的数组,想知道满足某个条件的元素们所在的索引位置,此时使用np.where()函数
在这里插入图片描述

八.从数组到张量

8.1 数组与张量

1.PyTorch作为当前首屈一指的深度学习库,起降NumPy的语法尽数吸收,作为自己处理数据的基本语法,且运算速度从实用CPU的数组进不到使用GPU的张量
2.NumPy和PyTorch的基本语法几乎一致,具体表现为:
(1) np对应torch
(2) 数组array对应张量tensor
(3) NumPy的n维数组对应着PyTorch的n阶张量
3.数组与张量之间可以相互转换:
(1) 数组arr转为张量ts: ts = torch.tensor(arr)
(2) 张量ts转为数组arr: arr = np.array(ts)

8.2 语法不同点

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值