前言 本篇主要讲述的是主要通过pytorch来对数据进行处理
数组类 1.张量表示一个数值组成的数组,这个数组可能有多个维度。
将会有如下输出
2.可以通过张量的shape属性来访问张量的形状和张量中的元素个数
都能够表示出张量中含有多少个元素,只是shape是通过向量形式表示,numel直接通过数字显示
3.可以通过reshape来改变张量的形状,而不改变元素数量和数值。
其中3代表行数,4代表列数
4.使用全0,全1,其他常量或者从特定分布中随机采样的数字 torch.zeros((2 ,3 ,4 )) torch.ones((2 ,3 ,4 ))
其中,第一个数字代表生成的张量数量,第二三个数代表张量生成的行和列
5.通过提供包含数值的Python列表(或嵌套列表)来为所需张量中的每个元素赋予初始值 torch.tensor([[2 ,1 ,3 ,4 ],[1 ,2 ,3 ,4 ],[4 ,3 ,2 ,1 ]])
生成一个二维的张量
6.常见的标准运算符都可以被升级为按照元素运算 torch.tensor([1.0 , 2 , 4 , 8 ]) torch.tensor([2 , 2 , 2 , 2 ]) x+y x-y x*y x/y x**y
生成对应的计算之后的张量
7.把多个张量连接在一起 X = torch.arange(12 ,dtype=torch.float32).reshape((3 ,4 )) Y = torch.tensor([[2.0 ,1 ,4 ,3 ],[1 ,2 ,3 ,4 ],[4 ,3 ,2 ,1 ]]) torch.cat((X,Y),dim=0 ),torch.cat((X,Y),dim=1 )
其中,cat就是用于将其进行连接,dim=0可以理解为将张量堆起来,dim=1可以理解为将张量横向拼接
8.通过逻辑运算符来构建二元张量 X = torch.arange(12 ,dtype=torch.float32).reshape((3 ,4 )) Y = torch.tensor([[2.0 ,1 ,4 ,3 ],[1 ,2 ,3 ,4 ],[4 ,3 ,2 ,1 ]]) Z = X==Y
9.对张量中的所有元素进行一次求和
10.从numpy中过来的广播机制,可以应对不同形状的张量的运算 X = torch.arange(3 ).reshape(3 , 1 ) Y = torch.arange(2 ).reshape(1 , 2 ) print (X)print (Y) Z = X + Y print (Z)
其中原理为,将张量拓展为相同的形状(取各个维度的最大值),并且对拓展的维度,根据自身原先数值进行复制,然后再进行运算。 如图,(3,1)拓展成(3,2),并且拓展的一列的数值是复制的原先有的第一列数值
11.对于部分数据的读取,与python中的切片使用方式一致 X = torch.tensor([[1 , 2 ], [3 , 4 ], [5 , 6 ], [7 , 8 ], [9 , 10 ]]) print (X[-1 ])print (X[1 :3 ])
12.精确修改张量的某一个数值 X = torch.arange(12 ).reshape(3 ,4 ) X[1 ,2 ] = 9 print (X)
此处就是将第二行第三个的数值修改成9
13.为多个原素赋相同的数值
将X张量的前两行,前三列修改成12
创建人工数据集 创建一个csv数据集: os.makedirs(os.path.join('..' , 'data' ),exist_ok=True ) data_file = os.path.join('..' , 'data' , 'house_tiny.csv' ) with open (data_file, 'w' ) as f: f.write('NumRooms,Alley,Price\n' ) f.write('NA,Pave,106000\n' ) f.write('2,NA,106000\n' ) f.write('4,NA,178100\n' ) f.write('NA,NA,104000\n' )
makedirs用于创建一个目录,位置是:../data,也就是在上一级目录下创建一个data文件夹,如果目录存在与不会引发异常。 第二行同理,创建了一个名为house_tiny.csv文件 之后是通过写文件的方式对文件进行处理。
读取csv文件: 我们通过pandas库即可 import pandas as pddata = pd.read_csv('../data/house_tiny.csv' ) print (data)
缺失数据的填充: import pandas as pddata = pd.read_csv('../data/house_tiny.csv' ) print (data)inputs,outputs = data.iloc[ : ,0 :1 ], data.iloc[:,2 ] inputs = inputs.fillna(inputs.mean()) print (inputs)
iloc的意思是,选取哪些行,哪些列的东西来插入到新定义的变量当中,fillna代表着填充缺失值,mean是平均值。
将NAN视为一个类别,通过独热编码的方式进行输出,能够更好的处理数据: import pandas as pddata = pd.read_csv('../data/house_tiny.csv' ) inputs,outputs = data.iloc[:,0 :2 ],data.iloc[:,1 :3 ] inputs = pd.dummies(inputs, dummy_na=True , dtype=int ) prints(inputs)