04 数据操作 + 数据预处理【动手学深度学习v2】
数据操作对应文件夹为:notebooks/pytorch/chapter_preliminaries/ndarray.ipynb
数据操作练习:
练习1
import torch
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]])
X,Y,X==Y,X<Y,X>Y
Jupyter中运行结果:
练习2:
广播机制可以对两个张量进行对齐的规则是:会对两个张量从最后一个维度开始往前对比,对于两个张量的每一维,都需要满足以下三个条件之一:维度相等/其中一个维度是1/某一方没有这个维度(此时可以补1),否则则不能进行广播。
三个张量的广播同理,三个张量被对比的维度也需要满足,维度相等,或者其中两个相等另一个为1,或者另外两个为1。
import torch
X = torch.arange(18).reshape(2,3,3)
Y = torch.arange(3).reshape(1,1,3)
X,Y,X+Y,(X+Y).shape
import torch
X = torch.arange(18).reshape(2,3,3)
Y = torch.arange(3).reshape(1,1,3)
Z = torch.arange(3).reshape(1,3,1)
X,Y,Z,X+Y+Z,(X+Y+Z).shape
运行结果:
数据预处理对应文件夹为:notebooks/pytorch/chapter_preliminaries/pandas.ipynb
数据预处理练习:
import os
import pandas as pd
import torch
import numpy as np
#创建包含更多行和列的原始数据集
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,Distanc,Area\n')#列名
f.write('NA,Pave,127500,67,132\n')# 每行表示一个数据样本
f.write('2,NA,106000,100,NA\n')
f.write('4,NA,178100,NA,175\n')
f.write('NA,NA,140000,NA,NA\n')
f.write('5,NA,23400,15,234\n')
f.write('16,Pave,60000,2,350')
#删除缺失值最多的列
#先读取数据
df = pd.read_csv(data_file)
#统计每一列的缺失值数值
na_count = df.isna().sum()
#找出缺失值最多的那一列的列名
most_na_count = na_count.idxmax()
#删除这一列
df = df.drop(columns = most_na_count)
#将预处理之后的数据转换成张量形式
#处理缺失值
df = df.fillna(df.mean())
#转换为张量
tens = torch.tensor(df.to_numpy(dtype=np.float32))
print(df)
tens
运行结果