P1-数据操作实现
import torch
import numpy as np
x = torch.arange(12)
print(x)
print(x.shape)# 通过shape属性访问张量的形状与张量中元素的总数
print(x.numel()) #里面元素的总数
X = x.reshape(3, 4)#改变一个张量的形状而不改变元素数量和元素值,用reshape函数
print(X)
print(torch.zeros((2, 3, 4)))#使用全0、全1、其他常亮或者从特定分别中国随机采用的数字
print(torch.ones((2, 3, 4)))# 2个3行4列的二维数组组成的三维数组
print(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])
print(x + y)
print(x - y)
print(x / y)
print(x ** y) # 求幂运算
print(torch.exp(x)) # 指数运算
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]])
print(torch.cat((X, Y), dim = 0))# 0按行进行连接
print(torch.cat((X, Y), dim = 1))# 1按列进行连接
print(X == Y) # 通过逻辑运算符构建二元张量
print(X.sum())#对张量中的所有元素进行求和
## 广播机制来执行按元素操作哦
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
print(a)
print(b)
print(a + b)
## 可以用[-1]选择最后一个元素,用[1:3]选择第二个和第三个元素
print(X[-1])
print(X[1:3])
#可以通过指定索引把元素写入矩阵
X[1, 2] = 9
print(X)
## 为多个元素赋值相同的值,我们只需要索引所有元素,然后为他们赋值
X[0:2, :] = 12
print(X)
## 运行一些操作可能导致为新结果分配内存
before = id(Y)
Y = Y + X
print(id(Y) == before)
#执行原地操作
Z = torch.zeros_like(Y)
print('id(Z):', id(Z))
Z[:] = X + Y
print('id(Z):', id(Z))
## 如果在后续计算中没有重复使用X,我们也可以使用X[:] = X + Y或者X += Y来减少操作的内存开销
before = id(X)
X += Y
print(id(X) == before)
#转换为NumPy张量
A = X.numpy()
B = torch.tensor(A)
print(type(A), type(B))
#把大小为1的张量转换为python标量
a = torch.tensor([3.5])
print(a)
print(a.item())
print(int(a))
P2-数据预处理
import os
import pandas as pd
import torch
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')
data = pd.read_csv(data_file)
print(data)
## 为了处理缺失的数据,典型的方法包括插值,删除,这里我们用插值
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]#把第0和第1列拿出来放在inputs中,把最后一列拿出来放入outputs
inputs = inputs.fillna(inputs.mean())#对所有为na的值填充平均值
print(inputs)
## 对于inputs中的类别值或者离散值,我们将“NaN视为一个类别”
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)
## 现在inputs和outputs中的所有条目都是数值类型,它们可以转换为张量格式
X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
print(X)
print(y)