【动手学深度学习】课程笔记 04 数据操作和数据预处理

目录

数据操作

N维数组样例

访问元素

数据操作实现

入门

运算符

广播机制

节省内存

转换为其他Python对象

数据预处理实现


数据操作

N维数组是机器学习和神经网路的主要数据结构。

N维数组样例

访问元素

数据操作实现

下面介绍一下本课程中需要用到的PyTorch相关操作。

入门

import torch # 导入PyTorch库x = torch.arange(12)# 创建一个长度为12的一维张量,元素从0到11x.shape # 访问张量沿每个轴的长度,注意这里没有()x.numel() # 张量的大小,也就是所有元素的数量X = x.reshape(a, b) # 将张量的形状改为(a, b),其中a和b为整数,注意只是改变形状,不改变地址torch.zeros((a, b, c)) # 创建一个形状为(a, b, c)的张量,所有元素都设置为0torch.ones((a, b, c)) # 所有元素都设置为1torch.randn(a, b) # 元素从均值为0、标准差为1的正态分布中随机采样

运算符

import torch # 导入PyTorch库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  # **运算符是求幂运算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]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1) # 将两个矩阵在一维上连接起来

广播机制

当两个大小形状不同的矩阵做运算时,由于元素不能直接一一对应,所以会使用广播机制,通过适当复制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状。

当然,触发广播机制是需要条件的:

  1. 两个张量必须不为空;
  2. 两个张量从最后一个维度比较,必须每个维度都满足这三个条件之一:两个相同,其中一个为1,其中一个为空。
import torch # 导入PyTorch库a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))a + b# tensor([[0, 1],
#        [1, 2],
#        [2, 3]])

节省内存

import torch # 导入PyTorch库X = torch.tensor([[1, 2, 3], [4, 5, 6]])
Y = torch.tensor([[7, 8, 9], [3, 2, 1]])before = id(Y)
Y = Y + X
id(Y) == before# false
# 输出结果表明,这个加法操作改变了Y的指向,也就指向了新的内存地址Z = torch.zeros_like(Y)
print('id(Z):', id(Z))
Z[:] = X + Y
print('id(Z):', id(Z))# id(Z): 2219878943616
# id(Z): 2219878943616
# 将两个矩阵相加后赋值给同样大小的全零矩阵,内存地址就不会变了
# 这样就可以节省内存开销

转换为其他Python对象

不同库里的张量的数据类型也不同,但是可以把表示张量的字符看作指针,不同库的指针可以指向同一个张量,也就是共享底层内存,因此,改变一个张量也可能同时改变另一个。

import torch # 导入PyTorch库
import numpy # 导入numpy库X = torch.tensor([1, 2, 3])
A = X.numpy()
B = torch.tensor(A)
type(A), type(B)# (numpy.ndarray, torch.Tensor)a = torch.tensor([3.5])
a, a.item(), float(a), int(a) # (tensor([3.5000]), 3.5, 3.5, 3)
# 用item函数可以将张量转换为python标量

数据预处理实现

import osos.makedirs(os.path.join('..', 'data'), exist_ok = True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
# 创建一个人工数据集,并存储在csv文件中
# 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 pddata = pd.read_csv(data_file) # 使用pandas里的pd函数读取数据
data#    NumRooms Alley   Price
#0       NaN  Pave  127500
#1       2.0   NaN  106000
#2       4.0   NaN  178100
#3       NaN   NaN  140000# 下面是处理缺失的插值法
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2] # inputs为data的前两列,outputs为最后一列
inputs = inputs.fillna(inputs.mean()) # 对于inputs中缺失的数据,用同一列的均值替换“NaN”
print(inputs)# 因为inputs中的离散值只有两个:Pave和NaN,所以可以把它们标准化为1和0
inputs = pd.get_dummies(inputs,dummy_na = True)
print(inputs)import torchX = torch.tensor(inputs.to_numpy(dtype=float)) # 将数据转换为张量格式
y = torch.tensor(outputs.to_numpy(dtype=float))
X, y

以上是数据预处理的基本操作,还有很多进阶操作需要进一步学习,比如作业中的删除NaN值最多的列等,这些只是基础中的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/97340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BJT晶体管

BJT晶体管也叫双极结型三极管,主要有PNP、NPN型两种,符号如下: 中间的是基极(最薄,用于控制),带箭头的是发射极(自由电子浓度高),剩下的就是集电极&#xff0…

no Go files in ...问题

golang项目,当我们微服务分模块开发时,习惯把main.go放在cmd目录下分模块放置,此时,我们在项目根目录下执行go test . 或go build . 时会报错“no Go files in ...”, 这是因为在.目录下找不到go程序,或者找不到程序入…

python之subprocess模块详解

介绍 subprocess是Python 2.4中新增的一个模块,它允许你生成新的进程,连接到它们的 input/output/error 管道,并获取它们的返回(状态)码。 这个模块的目的在于替换几个旧的模块和方法。 那么我们到底该用哪个模块、哪个…

SQL_ERROR_INFO: “Duplicate entry ‘9003‘ for key ‘examination_info.exam_id‘“

今天刷题的时候,往数据库中插入一条语句,但是这个语句已经存在于数据库中了,所以不能用insert into 语句来插入,应该使用replace into 来插入。 REPLACE INTO examination_info(exam_id,tag,difficulty,duration,release_time) V…

springboot整合pi支付开发

pi支付流程图: 使用Pi SDK功能发起支付由 Pi SDK 自动调用的回调函数(让您的应用服务器知道它需要发出批准 API 请求)从您的应用程序服务器到 Pi 服务器的 API 请求以批准付款(让 Pi 服务器知道您知道此付款)Pi浏览器向…

【排序算法】堆排序详解与实现

一、堆排序的思想 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆(若不清楚什么是堆,可以看我前面的文章,有详细阐述)来进行选择数据&am…

论文阅读-- A simple transmit diversity technique for wireless communications

一种简单的无线通信发射分集技术 论文信息: Alamouti S M. A simple transmit diversity technique for wireless communications[J]. IEEE Journal on selected areas in communications, 1998, 16(8): 1451-1458. 创新性: 提出了一种新的发射分集方…

八大排序java

冒泡排序 /*** 冒泡排序:* 比较相邻的元素。如果第一个比第二个大,就交换他们两个。* 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。* 针对所有的元素重复以上的步骤&#x…

WEB各类常用测试工具

一、单元测试/测试运行器 1、Jest 知名的 Java 单元测试工具,由 Facebook 开源,开箱即用。它在最基础层面被设计用于快速、简单地编写地道的 Java 测试,能自动模拟 require() 返回的 CommonJS 模块,并提供了包括内置的测试环境 …

华为OD机试 - 最小步骤数(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入:4 8 7 5 2 3 6 4 8 12、输出:23、说明:4、思路分析 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《…

aarch64 平台 musl gcc 工具链手动编译方法

目标 手动编译一个 aarch64 平台的 musl gcc 工具链 musl libc 与 glibc、uclibc 等,都是 标准C 库, musl libc 是基于系统调用之上的 标准C 库,也就是用户态的 标准C 库。 musl libc 轻量、开源、免费,是一些 操作系统的选择,当前 Lite-OS 与 RT-Smart 等均采用自制的 mu…

【Vue面试题八】、为什么data属性是一个函数而不是一个对象?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:为什么data属性是一个函…

Spring实例化源码解析之Custom Events上集(八)

Events使用介绍 在ApplicationContext中,事件处理通过ApplicationEvent类和ApplicationListener接口提供。如果将实现ApplicationListener接口的bean部署到上下文中,每当一个ApplicationEvent被发布到ApplicationContext时,该bean将被通知。…

使用企业订货系统后的效果|软件定制开发|APP小程序搭建

使用企业订货系统后的效果|软件定制开发|APP小程序搭建 企业订货系统是一种高效的采购管理系统,它可以帮助企业更好地管理采购流程,降低采购成本,提高采购效率。 可以帮助企业提高销售效率和降低成本的软件工具。使用该系统后,企业…

如何使用 Tensor.art 实现文生图

摘要:Tensor.art 是一个基于 AI 的文本生成图像工具。本文介绍了如何使用 Tensor.art 来实现文生图的功能。 正文: 文生图是指将文本转换为图像的技术。它具有广泛的应用,例如在广告、教育和娱乐等领域。 Tensor.art 是一个基于 AI 的文本…

【SA8295P 源码分析】103 - QNX DDR RAM 内存布局分析

【SA8295P 源码分析】103 - QNX DDR RAM 内存布局分析 一、SA8295P QNX RAM 内存布局 (16G DDR)1.1 DDR 汇总描述1.2 QNX Meta reserved memory, DDR Rank01.3 Reserved for qnx1.4 Android GVM SysRam 相关内存(可修改)1.5 Reserved for qnx(不要修改)1.6 QNX SysRam 相关内…

强制删除文件?正确操作方法分享!

“我昨天在删除文件时有个文件一直删除不掉。想用强制删除的方法来把它删掉,应该怎么操作呢?谁能教教我呀?” 在使用电脑的过程中,我们有时候可能会发现文件无论怎么删除都无法删掉,如果我们想要强制删除文件但不知道怎…

Leetcode hot 100之回溯O(N!):选择/DFS

目录 框架:排列/组合/子集 元素无重不可复选 全排列 子集 组合:[1, n] 中的 k 个数 分割成回文串 元素无重不可复选:排序,多条值相同的只遍历第一条 子集/组合 先进行排序,让相同的元素靠在一起,如…

前端代码格式化规范总结

在日常开发过程中,经常会碰到代码格式化不一致的问题,还要就是 js 代码语法错误等没有及时发行改正,下面就介绍一下如何使用eslint、prettier、husky、lint-staged、commitizen来规范代码格式和提高代码质量的方法。 目录 准备工作代码检测代…

VMProtect使用教程(VC++MFC中使用)

VMProtect使用教程(VCMFC中使用) VMProtect是一种商业级别的代码保护工具,可以用于保护VC MFC程序。以下是使用VMProtect保护VC MFC程序的步骤: 1. 下载并安装VMProtect,C包含库及目录。 2. 在VC MFC项目中添加VMProtectSDK.h头文件,并在需…