pytoch笔记(李沐)数据操作

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)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值