当前位置: 首页 > news >正文

张量类型转换

一.前言

本章节我们来讲解张量的类型转换,掌握张量的转换方法,张量的类型转换也是经常使⽤的⼀种操作,是必须掌握的知识点。在本⼩节,我们主要学习如何将 numpy 数组和 PyTorch Tensor 的转化⽅法.

二.张量转换为 numpy 数组

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

import torch# 1. 将张量转换为 numpy 数组
def test01():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)if __name__ == '__main__':test01()

结果展示:

<class 'torch.Tensor'>
<class 'numpy.ndarray'>
tensor([100,   3,   4])
[100   3   4] 

三.numpy 转换为张量 

1. 使⽤ from_numpy 可以将 ndarray 数组转换为 Tensor,默认共享内存,使⽤ copy 函数避免共享。

2. 使⽤ torch.tensor 可以将 ndarray 数组转换为 Tensor,默认不共享内存。 

import torch
import numpy as np# 1. 使⽤ from_numpy 函数
def test01():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)# 2. 使⽤ torch.tensor 函数
def test02():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)if __name__ == '__main__':test01()test02()

 结果展示:

tensor([100,   3,   4])
[100   3   4]
tensor([100,   3,   4])
[2 3 4]

四.标量张量和数字的转换 

对于只有⼀个元素的张量,使⽤ item ⽅法将该值从张量中提取出来。

import torch# 3. 标量张量和数字的转换
def test03():# 当张量只包含⼀个元素时, 可以通过 item 函数提取出该值data = torch.tensor([30, ])print(data.item())data = torch.tensor(30)print(data.item())if __name__ == '__main__':test03()

结果展示:

30
30 

五.总结

在本⼩节中, 我们主要学习了 numpy 和 tensor 互相转换的规则, 以及标量张量与数值之间的转换规则。 

 

 

 

http://www.dtcms.com/a/276751.html

相关文章:

  • 深入探讨Java的ZGC垃圾收集器:原理、实战与优缺点
  • 格密码--数学基础--08最近向量问题(CVP)与格陪集
  • Mentor软件模块复杂,如何分角色授权最合理?
  • 【PTA数据结构 | C语言版】阶乘的递归实现
  • 串口屏的小记哦
  • 鸿蒙进程通信的坑之ServiceExtensionAbility
  • Datomic数据库简介(TBC)
  • Ntfs!LfsFlushLfcb函数分析之Ntfs!_LFCB->LbcbWorkque的背景分析3个restart页面一个普通页面的一个例子
  • 如何在IEEETrans格式的latex标题页插入图像
  • CCS-MSPM0G3507-4-基础篇-串口通讯-实现收和发
  • Java SE--抽象类和接口
  • 面试150 对称二叉树
  • Waiting for server response 和 Content Download
  • 嵌入式程序调试工具
  • 《人件》阅读笔记
  • 【Flask】基础入门
  • 华为业务变革项目IPD基本知识
  • nodejs获取可用cpu数
  • 前端弹性布局全解析
  • 20250712-2-Kubernetes 应用程序生命周期管理-部署应用的流程_笔记
  • PyVision:基于动态工具的具身智能体
  • 剑指offer——队列栈:用两个栈实现队列
  • 模型驱动的架构MDA的案例
  • 如何配置pip使用国内镜像?
  • 2D转换综合写法顺序,以及注意事项
  • 【理念●体系】模板规范篇:打造可标准化复用的 AI 项目骨架
  • 68 指针的减法操作
  • C语言文件读操作详解:使用fgets函数实现安全的按行读取
  • 在YOLO-World中集成DeformConv、CBAM和Cross-Modal Attention模块的技术报告
  • 进制转换算法详解及应用