当前位置: 首页 > 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.lryc.cn/news/586563.html

相关文章:

  • 巅峰对决:文心4.5 vs DeepSeek R1 vs 通义Qwen3.0——国产大模型技术路线与场景能力深度横评
  • 剑指offer56_数组中唯一只出现一次的数字
  • HTML(上)
  • 图像扭曲增强处理流程
  • 计算机视觉 之 经典模型汇总
  • 粒子滤波|粒子滤波的相关算法理论介绍
  • 内容总监的效率革命:用Premiere Pro AI,实现视频画幅“一键重构”
  • 菜鸟的C#学习(二)
  • 直播录屏技术揭秘:以抖音直播录屏为例
  • 系统性学习C语言-第十五讲-深入理解指针(5)
  • 【华为OD】MVP争夺战2(C++、Java、Python)
  • JVM--虚拟线程
  • 数据结构之并查集和LRUCache
  • STP生成树划分实验
  • 飞算JavaAI:重新定义Java开发效率的智能引擎
  • 【机器学习实战笔记 16】集成学习:LightGBM算法
  • Waiting for server response 和 Content Download
  • 【离线数仓项目】——电商域DWS层开发实战
  • BugBug.io 使用全流程(202507)
  • 计算机毕业设计Java停车场管理系统 基于Java的智能停车场管理系统开发 Java语言实现的停车场综合管理平台
  • STM32中的RTC(实时时钟)详解
  • 《Spring 中上下文传递的那些事儿》Part 8:构建统一上下文框架设计与实现(实战篇)
  • 利用docker部署前后端分离项目
  • 【攻防实战】记一次DC2攻防实战
  • 电网失真下单相锁相环存在的问题
  • CANoe实操学习车载测试课程、独立完成CAN信号测试
  • Spring Boot整合MyBatis+MySQL+Redis单表CRUD教程
  • 前端面试宝典---项目难点2-智能问答对话框采用虚拟列表动态渲染可视区域元素(10万+条数据)
  • 快速排序递归和非递归方法的简单介绍
  • Armstrong 公理系统深度解析