目录
1、二维数组是一维数组的叠加,三维数组是二维数组的叠加,四位数组是三维数组的叠加……
2.1 数据操作
1、二维数组是一维数组的叠加,三维数组是二维数组的叠加,四位数组是三维数组的叠加……
2、访问元素
访问一个元素:[1,2]
访问一行:[1,:]
访问一列:[:,1]
访问子区域:[1:3,1:] (访问第1行到第3行的开区间(不包含第三行),及第1列到最后一列开区间)
访问跳跃区域:[::3,::2] (默认从第0行第0列开始,行每隔三访问,列每隔2访问)
其他表示等:
[:, :1] #表示第1列
[:, :2] #表示第1,2列
2、一些元素的操作
张量表示一个数值组成的数组,arange创建等差数组
用shape属性来访问张量的形状和张量中元素总数
使用全0、全1、或者其他常量或从特定分布中随机采样的数字,这里((2,3,4))表示三维数组,三维是2,二维是3,一维是4
通过提供包含的数值的python列表来为所需张量中的每个元素赋予确定的值(二维数组)
打印shape是一个三维的数组
常见的标准算数运算+ - * / ** (都是按元素分别进行计算)
按元素,每个元素子元素进行运算,以下是求e的x次方,表示方法,因为e的2次方=7.3891,说一7.3891e+00的意思就是7.3891*10的0次方。
把多个张量结合到一起,dim=0是按行堆在一起,dim=1是按列堆在一起 dim的取值范围由输入张量的维度决定,输入为n维张量,dim取值在[0,n-1],dim=0时是在最高维度进行拼接,dim=1是在次最高维度进行拼接。
cat中din的学习链接:torch.cat()中dim说明_torch.cat(dim=1)_IT pupil的博客-CSDN博客
即使形状不同,我们仍然可以通过调用广播机制来执行按元素的操作
a+b是默认将两个矩阵都扩展成3*2的矩阵 a=[[0,0],[1,1],[2,2]] b=[[0,1],[0,1],[0,1]]
可以用[-1]选择最后一个元素,用[1:3]选择第二和第三个元素
可以通过指定索引将元素写入矩阵
运行一些操作可能导致为新结果分配内存
执行原地操作
如果在后续计算中没有重复使用X,我们也可以使用X[:] = X+Y 或 X += Y来减少操作的内存开销
转换为Numpy张量
将大小为1的张量转换为python标量,用.item()
2.2 数据预处理
创建一个人工数据集并存储在csv文件中
通过pandas输出刚才的csv文件数据
这里我的python版本是:(而mean在3.10.2及以下版本可以处理str类型数据,空值直接为NaN)
注意: 所以以下会出错。(所以如果读者也有这种问题不用太在意。)
后边两个模块的代码也会有些问题
2.3 线性代数
2.3.1 现代基础知识
1、对于标量的操作:
2、对于向量的操作:
3、对于范数(范数:指的是向量或者矩阵的长度):
正交矩阵补充:
n阶矩阵A,如果满足A*A^T=A^T*A=E
A是正交矩阵(等价于)A^T=A^(-1)
A是正交矩阵(可推)矩阵A的模等于1
矩阵A的单位行向量*单位行向量的转置就等于1
置换矩阵补充:
置换矩阵可以通过多次的行列的提取、重组可以重新得到原来的矩阵。
2.4 微积分/矩阵计算
1、亚导数
将导数扩展到不可微的函数
例如:y = |x|
dy/dx = 1,if x>0
0,if x<0
a,if x=0,-1<=a<=1
2、梯度
(1)标量、向量之间求导
标量x | 向量X | |
标量y | (标量对标量求导得到标量) | (标量对向量求导得到向量) |
向量Y | (向量对标量求导得到向量) | (向量对向量求导得到矩阵) |
例1:y是标量,X是向量。
梯度就是指向变化最大的方向
(以上两表加粗的就是向量。sum(x)中x是向量,||x||^2中x是向量,||x||^2=x1^2+x2^2+……+xn^2)
(第二个表中最后一个和得到的是矩阵)
例2:向量对向量求导得到矩阵
(A是矩阵)
(2)向量的链式求导