李沐《动手学深度学习》笔记2-数据操作和数据预处理

数组类型

N维数组
标量->一个类别
一维数组->一个特征向量
二维数组->一个样本,特征矩阵(宽/高)。每行就是一个一维数组(表样本),列表示不同的特征。
三维数组->多个二维数组,表图片。宽/高/通道
四维数组->多个三维数组,表批量图片。batch/宽/高/通道
5维数组->多一个时间维度。表视频

创建数组

形状,比如3*4
数据类型,比如32位浮点类型
初始化,比如全0或者随机数

访问元素

在一个二维数组中访问元素:(从0开始)
一个元素[1,2]
一行[1,:]
一列[:,1]
一个子区域[1:3,1:](左开右闭)
[::3,::2](每隔3行取一个,跳着取)
在这里插入图片描述

数据操作和数据预处理
import torch
x = torch.arange(12) #tensor 0-11
x.shape #torch.Size([12])
x.numel() #12(numelement),改变张量的形状
X = x.reshape(3,4)#tensor([[],[],[]])
torch.zeros((2,3,4))
torch.ones((2,3,4)) #tensor([[[],[]],[[],[]]])
torch.tensor([[1,2,3],[4,5,6],[7,8,9]])
#标准的+,-,*,/,**运算都是按元素进行运算的
x = torch.tensor([1.0,2.0,4])
y = torch.tensor([2,2,2])
x+y,x-y,x*y,x/y,x**y
X = torch.arange(12,dtype=torch.float32).reshape((3,4))
Y = torch.tensor([[1,1,1,1],[1,1,1,1],[1,1,1,1]])
torch.cat((X,Y),dim=0),torch.cat((X,Y),dim=1)
#按维度0(行)进行拼接,按维度1(列)进行拼接,
#torch.Size([6,4]),后者torch.Size([3,8])
X == Y#通过逻辑运算符构建二元张量,tensor([[False,True,]])
X.sum()#tensor(66.)#[3,4]
a = torch.arange(3).reshape((3,1))
b = torch.arange(2).reshape((1,2))
a+b#tensor.Size([3,2])
X[-1](X[-1,:]),X[1,3]
X[0:2,:]=12#(等同于X[0:2]=12)

before = id(Y) #id是内存存储地址的十进制表示
Y = Y + X
id(Y) == before #False
############执行原地操作
Z = torch.zeros_like(Y)
Z[:] = X+Y #如此内存地址不变,对数据元素的改写

#以下也是原地操作
X+=Y
X[:]=X+Y
#numpy和torch相互转换
A = X.numpy()
B = torch.tensor(A)
type(A),type(B)#(numpy.ndarray,torch.tensor)
#转换为python标量
a = torch.tensor([3.5])
a,a.item(),float(a),int(a)
#tensor([3.5000]),3.5,3.5,3

数据预处理

import os
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,127500\n')#每行表示一个数据样本
	f.write('2,NA,106000\n')
	f.write('4,NA,178100\n')
	f.write('NA,NA,140000\n')
	
import pandas as pd
data = pd.read_csv(data_file) #从创建的csv文件加载原始数据集
print(data)
#处理缺失的数据,典型的方法有插值和删除
inputs,outputs = data.iloc[:,0:2],data.iloc[:,2]#indexlocation
inputs = inputs.fillna(inputs.mean()) #fillna填充nan数据
print(inputs)

#对于inputs中的类别数和离散值,我们将‘NaN'视为一个类别
inputs = pd.get_dummies(inputs,dummy_na=True)
print(inputs)#会变为pave-1,na-0,one-hot编码

import torch
X,y = torch.tensor(inputs.values),torch.tensor(outputs.values)
#X,y都变为了张量

在这里插入图片描述
注意点

a = torch.arange(12)
b = a.reshape((3,4))
b[:]=2
a #tensor([2,2,2,2...,2])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值