# 机器学习day05

news/2024/9/24 18:06:21

张量元素类型转换

  1. data.type(torch.DoubleTensor)
 data = torch.full([2, 3], 10)print(data.dtype)# 将 data 元素类型转换为 float64 类型
data = data.type(torch.DoubleTensor)print(data.dtype)# 转换为其他类型
# data = data.type(torch.ShortTensor)# data = data.type(torch.IntTensor)# data = data.type(torch.LongTensor)# data = data.type(torch.FloatTensor)
  1. data.double()
data = torch.full([2, 3], 10)print(data.dtype)# 将 data 元素类型转换为 float64 类型
data = data.double()print(data.dtype)# 转换为其他类型
# data = data.short()# data = data.int()# data = data.long()# data = data.float()

1.1张量转换为NumPy数组

​ 使用 Tensor.numpy 函数可以将张量转换为 ndarray数组,但是共享内存, 可以使用 copy 函数避免共享。

# 1.将张量转换为 numpy数组
data_tensor= torch.tensor([2, 3, 4])# 使用张量对象中的 numpy函数进行转换
data_numpy = data_tensor.numpy()print(type(data_tensor))print(type(data_numpy))# 注意: data_tensor和 data_numpy共享内存
# 修改其中的一个,另外一个也会发生改变
# data_tensor[0] = 100data_numpy[0] = 100print(data_tensor)print(data_numpy)
#2.对象拷贝避免共享内存
data_tensor= torch.tensor([2, 3, 4])# 使用张量对象中的 numpy函数进行转换,通过copy方法拷贝对象
data_numpy = data_tensor.numpy().copy()print(type(data_tensor))print(type(data_numpy))# 注意: data_tensor和 data_numpy此时不共享内存
# 修改其中的一个,另外一个不会发生改变
# data_tensor[0] = 100data_numpy[0] = 100print(data_tensor)print(data_numpy)

​ 使用from_numpy()可以将ndarray数组转换为Tensor,共享内存,使用copy()函数避免共享

data_numpy = np.array([2, 3, 4])# 将 numpy 数组转换为张量类型
# 1. from_numpy# 2. torch.tensor(ndarray)data_tensor = torch.from_numpy(data_numpy)# nunpy 和 tensor 共享内存
# data_numpy[0] = 100data_tensor[0] = 100print(data_tensor)print(data_numpy)

​ 使用torch.tensor()可以将ndarray数组转换为Tensor,不共享内存。

data_numpy = np.array([2, 3, 4])data_tensor = torch.tensor(data_numpy)# nunpy 和 tensor 不共享内存
# data_numpy[0] = 100data_tensor[0] = 100print(data_tensor)print(data_numpy)

​ 对于只有一个元素的张量,使用item()函数将该值从张量中提取出来

# 当张量只包含一个元素时, 可以通过 item() 函数提取出该值
data = torch.tensor([30,])print(data.item())data = torch.tensor(30)print(data.item())

总结

  1. 张量转换为 numpy数组
  • data_tensor.numpy()
  • data_tensor.numpy().copy()
  1. numpy 转换为张量
  • torch.from_numpy(data_numpy)
  • torch.tensor(data_numpy)
  1. 标量张量和数字转换
  • data.item()

1.2张量数值计算

加减乘除取负号:(不会修改原数据)

add、sub、mul、div、neg

add_、sub_、mul_、div_、neg_(其中带下划线的版本会修改原数据)

data = torch.randint(0, 10, [2, 3])print(data)# 1. 不修改原数据
new_data= data.add(10)  # 等价 new_data= data + 10print(new_data)# 2. 直接修改原数据 注意: 带下划线的函数为修改原数据本身
data.add_(10)  # 等价 data += 10print(data)# 3. 其他函数
print(data.sub(100))print(data.mul(100))print(data.div(100))print(data.neg())

1.2.1点乘指(Hadamard)的是两个同维矩阵对应位置的元素相乘,使用mul和运算符 * 实现。

6124f2470626839e370f9ed38457e8a

data1 = torch.tensor([[1, 2], [3, 4]])data2 = torch.tensor([[5, 6], [7, 8]])# 第一种方式
data = torch.mul(data1, data2)print(data)# 第二种方式
data = data1 * data2print(data)

1.2.2矩阵乘法运算

矩阵乘法运算要求第一个矩阵 shape: (n, m),第二个矩阵 shape: (m, p), 两个矩阵点积运算 shape 为: (n, p)。

  1. 运算符 @ 用于进行两个矩阵的乘积运算
  2. torch.matmul 对进行乘积运算的两矩阵形状没有限定.对数输入的 shape 不同的张量, 对应的最后几个维度必须符 合矩阵运算规则
# 点积运算
data1 = torch.tensor([[1, 2], [3, 4], [5, 6]])data2 = torch.tensor([[5, 6], [7, 8]])# 方式一:data3 = data1 @ data2print("data3-->", data3)# 方式二:data4 = torch.matmul(data1, data2)print("data4-->", data4)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Kali 安装并配置 Nessus

Kali 安装并配置 Nessus 安装 Nessus创建nessus文件夹sudo mkdir /opt/nessus下载 Nessus ( https://www.tenable.com/downloads/nessus?loginAttempted=true ),并上传至 /opt/nessus 文件夹在 /opt/nessus 路径下,使用命令安装 Nessusdpkg -i Nessus-10.7.4-debian6_amd64.…

Kotlin 数据类型详解:数字、字符、布尔值与类型转换指南

Kotlin中变量类型由值决定,如Int、Double、Char、Boolean、String。通常可省略类型声明,但有时需指定。数字类型分整数(Byte, Short, Int, Long)和浮点(Float, Double),默认整数为Int,浮点为Double。布尔值是true或false,Char用单引号,字符串用双引号。数组和类型转换…

Exercises

### Auto自动化变量自动存储类别是默认的存储类别,通常用于在”函数内部定义的局部变量“。这些变量会在程序执行到其定义的代码块时对应的栈空间被创建,函数执行完毕后变量对应栈空间会自动销毁。 示例: int main() //宿主 {auto int data;//寄生虫 auto int data; 局部变量…

vxlan基本原理及裸搭过程

https://mp.weixin.qq.com/s/pqVvBd2CbHkWwD79aDb6mg剥离flannel或者其他overlay网络的上层封装,我们可以通过 ip命令纯手工搭建一个vxlan overlay网络, 这其中最关键的部分是:vethpair: 打通容器内外 vxlan.nic: 虚拟网卡,封装/解封数据包除了创建这些硬件,我们还需要设置…

c语言程序实验————实验报告十二

c语言程序实验————实验报告十二实验项目名称: 实验报告十二 用指针处理函数与数组 实验项目类型:验证性 实验日期:2024 年 5 月 30 日一、实验目的 1.掌握指针变量的定义格式,会定义和使用指针变量 2.能正确建立指针变量与数组(包括一维、两维和字符串数组)的联系,并…

6.21-二叉搜索树的最近公共祖先

235. 二叉搜索树的最近公共祖先 题意描述:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己…

Python标注工具labelImg使用Pyinstaller打包成EXE的过程及问题处理

直接上过程 1.在python项目中使用pip命令安装pyinstaller。 2.在python编辑器(如Pycharm)终端切换到要打包的.py文件所在目录。 3.使用pyinstaller工具命令打包.py文件,如: pyinstaller labelImg.py --noconsole --workpath .\Pyinstaller\temp --distpath .\Pyinstaller\…

网易云音乐榜单爬取

打开网易云音乐,进入飙升榜进入到开发者工具页面,搜索列表页歌曲名称,查看请求地址模拟浏览器发出请求,查看响应内容import requestsurl = https://music.163.com/discover/toplist?id=19723756headers = {User-Agent:ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebK…