深度学习1-15.2 一数据操作N维数组是机器学习和神经网络的主要数据结构1创建数组:创建数组需要1形状例如3*4矩阵2每个元素的数据类型例如32位浮点数3每个元素的值例如全是0或者随机数2访问元素3代码运行首先导入torchimport torch张量表示一个数值组成的数组这个数组可能有多个维度atorch.aravge(12)print(a)我们可以通过张量的shape属性来访问张量的形状和张量中元素的总数a.shape torch.Size([12])a.numel 12用reshape来改变一个张量的形状而不改变元素数量和元素值aa.reshape(3,4)用zeros来用全0、全1、其他常量或者从特定分布中随机采样的数字print(torch.zeros(2,3,4))print(torch.ones(2,3,4)).tensor来实现提供包含数值的python列表或嵌套列表来为所需张量中的每个元素赋予确定值torch.tensor([[2,1,4,3],[1,2,3,4],[4,3,2,1]])xtorch.arange(12,dtypetorch.float32).reshape((3,4)) ytorch.tensor([[2.0,1,4,3],[1,2,3,4],[4,3,2,1]]) storch.cat((x,y),dim0),torch.cat((x,y),dim1) print(s)xy进行判断print(xy)x.sum()进行求和print(x.sum())二数据预处理1创建创建一个人工数据集并存储在csv文件 import osimport os import pandas as pd os.makedirs(os.path.join(..,data),exist_okTrue) data_fileos.path.join(..,data,house_tiny.csv) with open(data_file,w) as f: f.write(NumRooms,Alley,Price\n) f.write(NA,Pave,127500\n) f.write(2,NA,106000\n) f.write(4,NA,178100\n) f.write(NA,NA,140000\n) datapd.read_csv(data_file) print(data)2加载加载数据集datapd.read_csv(data_file) print(data)print(data)3插值为了处理缺失的数据我们可以考虑插值inputsdata.iloc[:,0:2] outputsdata.iloc[:,2] num_col [NumRooms] cat_col [Alley] inputs[num_col] inputs[num_col].fillna(inputs[num_col].mean()) inputs[cat_col] inputs[cat_col].fillna(Unknown) print(inputs)对于inputs中的类别值或离散值我们将“NAN”视为一个类别x torch.tensor(inputs.values, dtypetorch.float32) y torch.tensor(outputs.values, dtypetorch.float32).reshape(-1, 1)三, 数据操作QA1转换为Numpy张量ax.numpy() btorch.tensor(a) print(type(a))2转换为python标量将大小为1的张量转换为python标量import torch atorch.tensor([3.5]) print(a) print(a.item()) print(float(a)) print(int(a))四线性代数1知识点简单操作cab where ciaibica*b where cia*bicsin a where cisin ai向量2矩阵3范数4特殊矩阵5特征向量和特征值五线性代数实现1标量由只有一个元素的张量表示import torch xtorch.tensor([3.0]) ytorch.tensor([2.0]) print(xy) print(x*y) print(x/y) print(x**y)2可以将向量视为标量值组成的列表xtorch.arange(4) print(x)3通过张量的索引来访问任意元素xtorch.arange(4) print(x) print(x[3])4访问张量的长度print(len(x))5通过指定两个分量m和n来创建一个形状为m*n的矩阵atorch.arange(20).reshape(5,4) print(a)6矩阵的转置ba.T print(b)7对称矩阵ctorch.tensor([[1,2,3],[2,0,4],[3,4,5]]) print(c) print(cc.T)8轴的数据结构就像向量是标量的推广矩阵是向量的推广一样我们可以构建具有更多轴的数据结构dtorch.arange(24).reshape(2,3,4) print(d)9规律给定具有相同形状的任何两两个张量任何按元素二元运算的结果都将是相同形状的张量mtorch.arange(20,dtypetorch.float32).reshape(5,4) nm.clone() print(m) print(mn)10哈达玛积两个矩阵的按元素乘法称为哈达玛积mtorch.arange(20,dtypetorch.float32).reshape(5,4) nm.clone() print(m*n)print(ax) print((a*x).shape)11求和计算其元素的和axis1是按照行求和axis2是按照列求和xtorch.arange(4,dtypetorch.float32) print(x) print(x.sum())12求平均值print(x.mean())计算求和或均值时保持轴数不变13累加求和使用cumsumprint(a.cumsum(axis0))14点积是相同位置的按元素乘积的和print(torch.dot(x,y)) print(x*y)15矩阵向量积Ax是一个长度为m的列向量其元素是点积xtorch.arange(4,dtypetorch.float32) ytorch.arange(4,dtypetorch.float32).reshape(1,4) print(torch.mv(y,x))16叉乘矩阵print(torch.mm(y,x))17L2范数是向量元素平方和的平方根utorch.tensor([3.0,-4.0]) print(torch.norm(u))18L1范数是向量元素的绝对值之和print(torch.abs(u).sum())19佛罗贝尼乌斯范数矩阵的佛罗贝尼乌斯范数是矩阵元素的平方和的平方根print(torch.norm(torch.ones((4,9))))六矩阵计算1标量导数2亚导数3梯度4样例

本月热点