04 数据操作+数据预处理

动手学深度学习

基本操作

创建tensor,输出大小

# 导入torch
import torch
# 使用arange 创建一个行向量
x = torch.arange(12)  # 创建了一个[0,12)包含12个元素的张量
--> output:tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
y = torch.arange(5,12) # 创建了一个[5,12)的张量
# 使用shape访问张量的形状
x.shape 
--> output:torch.Size([12])
# 使用numel查看张量元素的综述,即形状的所有元素成绩
x.numel()
--> output:12
# 使用reshape改变张量形状,可以看出来其实x的形状没变,只是赋值给了X
X = x.shape(3,4)
X
# 使用torch.zeros()创建全为0的矩阵
torch.zeros((2, 3, 4))
--> output:
tensor([[[0., 0., 0., 0.],
         [0., 0., 0., 0.],
         [0., 0., 0., 0.]],

        [[0., 0., 0., 0.],
         [0., 0., 0., 0.],
         [0., 0., 0., 0.]]])
 # 使用torch.ones()创建全为1的矩阵
 torch.zeros((2, 3, 4))
 # 使用torch.randn()创建随机采样的值
 torch.randn(3, 4)
 # 当然也可以直接对tensor赋值
 torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])

运算操作

加减乘除。

x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y  # **运算符是求幂运算

连接操作concatenate
将两个相同size的tensor使用torch.cat()连接起来,其中dim 表示沿哪个轴连接

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]])
# dim=0 和 dim=1
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)
# 通过逻辑运算符构建二元张量
X == Y
-output:
tensor([[False,  True, False,  True],
        [False, False, False, False],
        [False, False, False, False]])
# 通过X.sum()对tensor中的元素进行求和
X.sum()

广播机制

索引&切片

X[-1]:切的是最后一个
X[1:3]: 切的是[1:3),也就是第1个和第2个元素
X[1,2]=9: 对该位置进行元素写入
X[0:2,:]=12: 对第0行和第1行的所有列均赋值12

数据预处理

读取数据集

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')
# 使用pd.read_csv()读取数据集
data = pd.read_csv(data_file)
   NumRooms Alley   Price
0       NaN  Pave  127500
1       2.0   NaN  106000
2       4.0   NaN  178100
3       NaN   NaN  140000
# 使用data.iloc()对数据集的输入和输出切割
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
# 使用inputs.fillna()对NAN值进行填充
inputs = inputs.fillna(inputs.mean())
   NumRooms Alley
0       3.0  Pave
1       2.0   NaN
2       4.0   NaN
3       3.0   NaN
# 将Alley列分成两列
inputs = pd.get_dummies(inputs, dummy_na=True)
   NumRooms  Alley_Pave  Alley_nan
0       3.0           1          0
1       2.0           0          1
2       4.0           0          1
3       3.0           0          1
# 将他们转换成tensor格式,以方便后续处理
X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
(tensor([[3., 1., 0.],
         [2., 0., 1.],
         [4., 0., 1.],
         [3., 0., 1.]], dtype=torch.float64),
 tensor([127500, 106000, 178100, 140000]))

总结

简单的Python复健。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值