1. 预处理
1.1 N维数组
(1)数组样例
N维数组是机器学习和神经网络的主要数据结构
(2)创建数组需要
(3)访问元素
数组索引是从0开始的
2.2数据操作实现(pytoch)
(1)导包
import torch
(2)张量(tensor)
定义语法:x = torch.arange(数量)
x = torch.arange(12)#从0开始到11的数拿出来
print(f"x的张量是:{x}")
print(f"通过numel属性访问张量标量{x.numel()}")
print(f"通过shape属性访问张量形状和总数{x.shape}")
print()
(3)改变张量的形状
语法:张量.reshape(行,列)
x = x.reshape(4,3)#可以改变张量的形状(改为n,m矩阵)
print(f"被reshape分割后的张量:{x}")
print(f"通过shape属性访问张量形状和总数{x.shape}")
print(f"通过numel属性访问张量标量{x.numel()}")
print()
(4)使用全0、全1、常量或特定分布中取随机数
① 全0赋值
语法:torch.zeros(深度,行,列)
'''
创建一个全0的矩阵
'''
x = torch.zeros((2,3,4))#深度2,长3,宽4
print(f"创建一个全0的矩阵,深度2,长3,宽4{x}")
'''
② 全1赋值
'''
创建一个全1的矩阵
'''
x = torch.ones((2,3,4))#深度2,长3,宽4
print(f"创建一个全1的矩阵,深度2,长3,宽4{x}")
print()
③其他常量赋值
'''
创建特定值的矩阵(列表嵌套列表)
x.tensor()
'''
x = torch.tensor([
[
[2,1,4,3],[1,2,3,4],[4,3,2,1]
]
])
print(f"创建特定值的矩阵(列表嵌套列表){x}")
print(f"张量形状{x.shape}")
print()
(5)常见的标准运算符运算
'''
常见的标准运算符(+、-、*、/,**)都可以被升级为按元素运算
**(求幂运算)列如x**y 是x的y次方
'''
x = torch.tensor([1.0,2,4,8])
y = torch.tensor([2,2,2,2])
print(f"矩阵x:{x}")
print(f"矩阵y:{y}")
print(f"x+y:{x+y}")
print(f"x-y:{x-y}")
print(f"x/y:{x/y}")
print(f"x**y:{x**y}")#x的y次方
(6)多张量连结
'''
张量连结
'''
#创建一个张量x,总数为12,数据类型是float32,形状是3行4列
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(f"矩阵x:{x}")
print(f"矩阵y:{y}")
print(f"dim=0堆起来{torch.cat( (x,y),dim=0 )}")
print(f"dim=1按行合并{torch.cat( (x,y),dim=1 )}")
① dim = 0 运行结果
② dim = 1时运行结果
(7)通过逻辑运算符判断张量
若有矩阵x,y:
x==y
结果:
(8)张量求和
语法:张量.sum()
'''
求和
x.sum()
'''
print(f"张量求和{x.sum()}")
print()
'''
(9)通过索引方式改变张量的某个值
语法:张量[行,列] = 值
索引访问:
张量[-1] = 是最后一个元素
张量[1:3]从第一行到第三行的所有元素
(10)张量转换
①张量转换
A = x.numpy()#将x转换为Numpy
B = torch.tensor(A)#将Numpy转换为tensor
print(f"A类型为{type(A)}")
print(f"B类型为{type(B)}")
print()
② 将张量转换为python标量
'''
将张量转换为python标量
'''
print("将大小为1的张量转换为python标量")
a = torch.tensor([3.5])
print(f"张量a{a}")
b =a.item()
print(f"a.item()\t{b}")
print(f"float(a)\t{float(a)}")
print(f"int(a)\t{int(a)}")
(11)广播机制(线性代数概念)
'''
1.即时形状不同,我们仍然可以通过调用广播机制(broadcasting mechanism)
来进行元素操作
2.矩阵加法操作
'''
a = torch.arange(3).reshape((3,1))
b = torch.arange(2).reshape((1,2))
print("即时形状不同,我们仍然可以通过调用广播机制broadcasting mechanism来进行元素操作")
print(f"a矩阵:{a}")
print(f"b矩阵:{b}")
print(f"a+b:{a+b}")
print()
矩阵相加过程
### 12.减少内存开销
z[:] = x + y
或者
x+=y
若x=x+y 则会开辟一块新的内存空间,不利于内存的使用
2.数据预处理
(1)准备的库
import os #操作系统函数
import pandas as pd
import torch
(2)csv文件介绍
①介绍
csv文件介绍:CSV全称 Comma Separated values,是一种用来存储数据的纯文本。
通常用于电子表格或数据库软件。
②创建代码
#创建csv文件
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')#NA表示缺失
f.write('2,NA,106000\n')
f.write('4,NA,178100\n')
f.write('NA,NA,140000\n')
data = pd.read_csv(data_file)#pandas阅读csv文件
print(data)
③结果
(3). os的一些用法
①创建目录
'''
①os.makedirs('文件目录名称',exist_ok=True)
exist_ok=True代表即使要创建的文件存在也不会报错
②os.path.join('','')将两个路径拼接在一起
'''
#创建目录
os.makedirs(os.path.join('..','data'),exist_ok=True)
(4)pandas用法
①插值
平均数插值
语法:变量.mena()
用数值的平均数将内容补齐
#iloc = index location索引位置
inputs = data.iloc[:,0:2]#data是上面定义的变量
outputs = data.iloc[:,2]
#fillna填充函数
#mean求一个均值
inputs = inputs.fillna(inputs.mean())#把数值域的铺好
print(inputs)
用0和1表示存在法
#值变为要么为0要么为1
inputs = pd.get_dummies(inputs,dummy_na=True)
print(inputs)