【动手学深度学习】课程笔记 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程序,或者找不到程序入…

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. 创新性: 提出了一种新的发射分集方…

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 的文本…

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

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

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

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

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

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

Android ncnn-android-yolov8-seg源码解析 : 实现人像分割

1. 前言 上篇文章,我们已经将人像分割的ncnn-android-yolov8-seg项目运行起来了,后续文章我们会抽取出Demo中的核心代码,在自己的项目中,来接入人体识别和人像分割功能。 先来看下效果,整个图像的是相机的原图&#…

番外--Task2:

任务:root与普通用户的互切(区别),启动的多用户文本见面与图形界面的互切命令(区别)。 输入图示命令,重启后就由图形界面转成文本登录界面; 输入图示命令,重启后就由文本…

java实验(头歌)--类的继承以及抽象类的定义和使用

文章目录 第一题第二题第三题 第一题 import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.geom.PathIterator; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.util.Scanner;//把main 函数的给替换了 public static vo…

MybatisPlus01

MybatisPlus01 1.MybatisPlus初体验 1.1首先要引入MybatisPlus的依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version></dependency>1.2定义Mapp…

【JavaEE初阶】 Thread类及常见方法

文章目录 &#x1f334;Thread类的概念&#x1f333;Thread 的常见构造方法&#x1f384;Thread 的几个常见属性&#x1f340;start()-启动一个线程&#x1f332;中断一个线程&#x1f6a9;实例一&#x1f6a9;实例二&#x1f6a9;实例三 &#x1f38d;join()-等待一个线程&…