前言

本篇主要讲述的是主要通过pytorch来对数据进行处理


数组类

1.张量表示一个数值组成的数组,这个数组可能有多个维度。

x = torch.arange(12)

将会有如下输出
arange.png

2.可以通过张量的shape属性来访问张量的形状和张量中的元素个数

x.shape
x.numel()

都能够表示出张量中含有多少个元素,只是shape是通过向量形式表示,numel直接通过数字显示
shape.png

3.可以通过reshape来改变张量的形状,而不改变元素数量和数值。

x.reshape(3,4)

其中3代表行数,4代表列数
reshape.png

4.使用全0,全1,其他常量或者从特定分布中随机采样的数字

torch.zeros((2,3,4))
torch.ones((2,3,4))

其中,第一个数字代表生成的张量数量,第二三个数代表张量生成的行和列
zeros.png

5.通过提供包含数值的Python列表(或嵌套列表)来为所需张量中的每个元素赋予初始值

torch.tensor([[2,1,3,4],[1,2,3,4],[4,3,2,1]])

生成一个二维的张量
tensor.png

6.常见的标准运算符都可以被升级为按照元素运算

torch.tensor([1.0, 2, 4, 8])
torch.tensor([2, 2, 2, 2])
x+y x-y x*y x/y x**y

生成对应的计算之后的张量
caculate.png

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可以理解为将张量横向拼接
cat.png

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
logic.png

9.对张量中的所有元素进行一次求和

X.sum()
sum.png

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),并且拓展的一列的数值是复制的原先有的第一列数值
transform.png

11.对于部分数据的读取,与python中的切片使用方式一致

X = torch.tensor([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]])
print(X[-1])
print(X[1:3])
slice.png

12.精确修改张量的某一个数值

X = torch.arange(12).reshape(3,4)
X[1,2] = 9
print(X)

此处就是将第二行第三个的数值修改成9
change.png

13.为多个原素赋相同的数值

X[0:2, 0:3] = 12
print(x)

将X张量的前两行,前三列修改成12
big_slice.png

创建人工数据集

创建一个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 pd
data = pd.read_csv('../data/house_tiny.csv')
print(data)

pandas.png

缺失数据的填充:

import pandas as pd
data = 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)
fill.png

iloc的意思是,选取哪些行,哪些列的东西来插入到新定义的变量当中,fillna代表着填充缺失值,mean是平均值。

将NAN视为一个类别,通过独热编码的方式进行输出,能够更好的处理数据:

import pandas as pd
data = 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)
fill.png