一、创建张量

1.张量基本创建方式

  • torch.tensor 根据指定数据创建张量  (最重要)
  • torch.Tensor 根据形状创建张量, 其也可用来创建指定数据的张量
  • torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量

1.1 torch.tensor

# 方式一:创建张量 torch.tensor
def create_tensor():# 1.创建标量张量data1 = torch.tensor(3)# print(data1.ndim) # 维度:0# print(data1)# print(data1.shape)# print(data1.dtype)# 2.创建一维向量张量data2 = torch.tensor([2, 3, 4])  # 几个数字shape就是几 torch.Size([3]) torch.int64# print(data2,data2.shape,data2.dtype)# print(data2.ndim) # 维度:1# 3.创建二维向量张量data3 = torch.tensor([[2, 3, 4], [6, 7, 8]])  # 2个样本,每个样本三个特征 torch.Size([2, 3]) torch.int64# print(data3,data3.shape,data3.dtype)# print(data3.ndim) # 维度:2
if __name__ == '__main__':create_tensor()

1.2 torch.Tensor

# 方式二:创建张量 torch.Tensor
def create_Tensor():# ctrl+p:参数提示# 根据形状# data=torch.Tensor(2,3)# data=torch.tensor(2,3) #报错# data=torch.Tensor(3)# 根据数值data = torch.Tensor([3, 4])# print(data)
if __name__ == '__main__':create_Tensor()

1.3 torch.IntTensor、torch.FloatTensor、torch.DoubleTensor

# 方式三:创建张量 torch.IntTensor
def create_IntTensor():# 根据形状创建# data=torch.IntTensor(3,4)# 根据数值创建data = torch.IntTensor([3, 4])# 尝试小数# data=torch.IntTensor([3.2,4.3]) #会省略小数点后# data=torch.FloatTensor([3.2,4.3]) #tensor([3.2000, 4.3000]) torch.float32# data=torch.DoubleTensor([3.2,4.3]) #tensor([3.2000, 4.3000], dtype=torch.float64) torch.float64print(data, data.dtype)
if __name__ == '__main__':create_IntTensor()

2.创建线性和随机张量

  • torch.arange 和 torch.linspace 创建线性张量
  • torch.random.init_seed 和 torch.random.manual_seed 随机种子设置
  • torch.randn 创建随机张量

2.1 torch.arange 和 torch.linspace

  1. arange(start,end,step) start默认0,step默认1,表示步长,包左不包右 包含0不包含10

  2. linspace(start,end,steps) 包左且包右,steps取多少个值

# 创建线性张量
def create_arange_linspace_tensor():arange_data=torch.arange(0,10,1)print(arange_data,arange_data.dtype) #tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) torch.int64lin_data=torch.linspace(0,10,5)print(lin_data,lin_data.dtype) #tensor([ 0.0000,  2.5000,  5.0000,  7.5000, 10.0000]) torch.float32
if __name__ == '__main__':create_arange_linspace_tensor()

2.2 torch.random.init_seed 和 torch.random.manual_seed

  • torch.initial_seed()
  • torch.random.initial_seed() # 与上一行一样写法
  •  torch.manual_seed(100)
  •  torch.random.manual_seed(100)  # 与上一行一样写法
# 创建随机张量
def create_random_tensor():# 创建两行三列的随机种子data=torch.randn(2,3)# 查看随机数种子# print('随机数种子:', torch.initial_seed()) #值一直在变# print('随机数种子:', torch.random.initial_seed()) # 与上一行一样写法# 手动随机数种子设置torch.manual_seed(100)# torch.random.manual_seed(100)  # 与上一行一样写法data = torch.randn(2, 3)print(data,data.dtype)
if __name__ == '__main__':create_random_tensor()

3.创建0-1张量

  • torch.ones 和 torch.ones_like 创建全1张量
  • torch.zeros 和 torch.zeros_like 创建全0张量 (重要)
  • torch.full 和 torch.full_like 创建全为指定值张量

这里的like是模仿数据的形状进行创建,而不是模仿值

def create_ones_zeros_full_tensor():# 1.1 创建指定形状全1张量# data = torch.ones(2, 3)# print(data,data.shape,data.size()) # torch.Size([2, 3]) torch.Size([2, 3]),pytorch中shape属性和size()方法是一样的# 1.2 根据张量形状创建全1张量# data = torch.ones_like(data)# print(data)# 2.1 创建指定形状全0张量# data=torch.zeros(2,3)# print(data,data.dtype)# 2.2 根据张量形状创建全0张量# data=torch.zeros_like(data)# print(data,data.dtype)# 3.1 创建指定形状指定值的张量data = torch.full([2, 3], 10)print(data) #tensor([[10, 10, 10],[10, 10, 10]])# 3.2 根据张量形状创建指定值的张量data = torch.full_like(data, 20)print(data) #tensor([[20, 20, 20],[20, 20, 20]])if __name__ == '__main__':create_ones_zeros_full_tensor()

二、张量的类型转换

默认类型:float32,int64

1. 张量之间的类型转换

  • data.type(torch.DoubleTensor)
  • data.double() (重点)
# 张量元素类型转换
def type_transform_tensor():data=torch.full([2, 3], 10)print(data,data.dtype) # torch.int64# 方式一# data1=data.type(torch.DoubleTensor)# print(data1,data1.dtype) # torch.float64# 方式二data2=data.double()print(data2,data2.dtype) #torch.float64
if __name__ == '__main__':type_transform_tensor()

2. 张量与numpy之间的类型转换

tensor转numpy

  •  方式一:通过numpy()转换为numpy,影响data_tensor的值,但可以通过data_numpy=data_tensor.numpy().copy(),深拷贝解决
  •  方式二:通过np.array()转换为numpy,不影响data_tensor的值,默认不共享内存 
import numpy as np
import torchdef tensor_to_numpy():# 1.tensor转numpydata_tensor=torch.tensor([1,2,3,4,5])print(data_tensor) # tensor([1, 2, 3, 4, 5])# 方式一:通过numpy()转换为numpy,影响data_tensor的值,但可以通过data_numpy=data_tensor.numpy().copy(),深拷贝解决data_numpy=data_tensor.numpy()print(data_numpy) # [1 2 3 4 5]# 修改numpy的值data_numpy[0]=200print(data_numpy) #[200   2   3   4   5]print(data_tensor) #tensor([200,   2,   3,   4,   5])# 方式二:通过np.array()转换为numpy,不影响data_tensor的值# data_numpy = np.array(data_tensor)# print("data_numpy-->", data_numpy) # [1 2 3 4 5]# data_numpy[0] = 200# print("data_numpy-->", data_numpy) # [200   2   3   4   5]# print('data_tensor-->', data_tensor) # tensor([1, 2, 3, 4, 5])

numpy转tensor

  • 方式一:torch.from_numpy 默认共享内存,使用 copy 函数避免共享,解决 data_tensor = torch.from_numpy(data_numpy.copy())
  •  方式2:torch.tensor 默认不共享内存 
def numpy_to_tensor():# 2.numpy转tensor# 准备一个numpy数据data_numpy=np.array([2,3,4])# print(data_numpy,data_numpy.dtype) # [2 3 4] int64# 方式一:torch.from_numpy 默认共享内存,使用 copy 函数避免共享,解决 data_tensor = torch.from_numpy(data_numpy.copy())# data_tensor = torch.from_numpy(data_numpy)# # print(data_tensor,data_tensor.dtype) # tensor([2, 3, 4]) torch.int64# # 修改tensor的值,发现会影响numpy# data_tensor[0]=200# print(data_tensor,data_tensor.dtype) # tensor([200,   3,   4]) torch.int64# print(data_numpy,data_numpy.dtype) # [200   3   4] int64# 方式2:torch.tensor 默认不共享内存 data_tensor=torch.tensor(data_numpy)data_tensor[0]=200print(data_tensor) # tensor([200,   3,   4])print(data_numpy) # [2 3 4]
if __name__ == '__main__':numpy_to_tensor()

3.标量张量和数字转换(重要)

data_tensor.item()

def scalar_tensor_to_number():# 标量转number# data_tensor=torch.tensor(3)# 一维向量转numberdata_tensor = torch.tensor([3]) # 一个数字 (1,)# 二维矩阵转number# data_tensor = torch.tensor([[3]]) # 一行一列(1,1)print(data_tensor) # tensor(3) tensor([3]) tensor([[3]])data1=data_tensor.item()print(data1) # 3
if __name__ == '__main__':scalar_tensor_to_number()

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

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

相关文章

阿里云图像编辑大模型开发部署

与阿里云一起轻松实现数智化让算力成为公共服务:用大规模的通用计算,帮助客户做从前不能做的事情,做从前做不到的规模。让数据成为生产资料:用数据的实时在线,帮助客户以数据为中心改变生产生活方式创造新的价值。图像…

查看磁盘分区并新建一个分区,挂载分区

linux系统磁盘df -h查看文件系统的磁盘的空间占用情况,常用于快速检查磁盘使用率:df -h-h是说把磁盘空间以G位单位,如果直接用df也是可以的,只不过单位是块,看的不明显du -sh /home/查看/home目录下总共占用了多大的空…

vscode单击暂时预览文件 双击持续打开文件

直接单击文件列表中的文件,会在编辑器中以预览模式打开 文件标签会显示为斜体,表示是预览状态 当您单击另一个文件或开始编辑时,预览文件会自动关闭 在 settings.json 中添加,mac通过cmd,实现。 json {"workbench.editor.ena…

设计模式-桥接模式04

什么是桥接模式? 桥接模式就是把事物的两个方面(两个变化的维度)分开管理,让它们可以分别自由变化,然后通过一个“桥”把它们连接起来。举个生活中的例子 想象一下你在买鞋子: 鞋子有不同的款式&#xff08…

群晖企业级NAS :从中小企业效率工具到核心业务数据基石

在数字化转型加速的今天,数据已成为企业最核心的资产。全球超半数财富 500 强企业选择群晖(Synology)作为数据管理伙伴,其企业级 NAS 解决方案凭借 DSM 操作系统的生态优势、硬件与软件的深度协同,以及覆盖全场景的产品…

C++访问限定符private、public、protected的使用场景

C 访问控制关键字:public、private、protected 在C中,public、private和protected是访问控制关键字,用于实现面向对象编程的封装特性,控制类成员的访问权限。 访问控制关键字的使用场景 1. public(公有成员&#xff09…

CKA08--PVC

Task mariadb namespace 中的 MariaDB Deployment 被误删除。请恢复该 Deployment 并确保数据持久性。 请按照以下步骤: 如下规格在 mariadb namespace 中创建名为 mariadb 的 PersistentVolumeClaim (PVC): 访问模式为 ReadWriteOnce 存储为 250Mi 集群…

Freertos系列(调度机制与创建任务)

如果不想看的可以直接使用git把我的代码下载出来,里面工程挺全的,后期会慢慢的补注释之类的 码云地址:stm32学习笔记: stm32学习笔记源码 如果不会使用git快速下载可以选择直接下载压缩包或者去看看git的使用 Git入门教程-CSDN博客 一 调…

C++中std::vector Vs std::deque VS std::list对比详解

1) 核心差异速览 std::vector:连续内存、随机访问 O(1)、尾部 push_back 摊还 O(1)、中间插入/删除 O(n),非常缓存友好。std::deque:分段(block)存储,不是整体连续;随机访问 O(1)(但…

【js】js实现日期转大写:

文章目录一、方法:二、使用效果:一、方法: export function dateToChnese(strDate) {let dateMap {year: "",month: "",day: ""}if (!strDate || strDate.length 0) return dateMap;const chineseDigit [&…

逆向 js

参考地址:https://blog.csdn.net/2302_80243887/article/details/146349209 注意事项 1. crypto-js 安装 需要你的.js文件同级目录执行npm install crypto-js 才能让js文件引入包 注意事项2: crypto-js 执行js 报错_external_runtime.py" A…

FFmpeg的安装及简单使用

简介 FFmpeg 是一个跨平台的音视频处理工具库/命令行工具,其核心作用是:对音视频文件或流进行解码、转换(编码)、封装/解封装等处理。 友情提示 本次安装以Windows64位操作系统为例 一、下载及安装 1、前往FFmpeg官网&#xff0…

Science Advances--3D打印生物启发扭曲双曲超材料,用于无人机冲击缓冲和自供电实时传感

湍流引起的振动会对飞机的结构完整性及飞行稳定性造成巨大威胁,尤其是在无人驾驶飞行器(UAV)中,实时的冲击监测和轻质防护尤为重要。该研究基于生物启发,通过3D 打印尼龙PA12 制备了一种扭转-双曲面超材料(…

AI大模型的研发流程

开发一个大模型是一个庞大、复杂且资源密集的系统工程,涉及算法研究、工程实现、数据管理和算力基础设施等多个层面。下面我将为您提供一个从零开始开发大模型的全景式路线图,涵盖了从概念到部署的全过程。请注意,完全从零开始训练一个类似GP…

Docker desktop安装Redis Cluster集群

本文章将介绍如何在 Windows 系统的 Docker Desktop 环境中搭建 Redis 集群。将创建一个包含 6 个节点(3 主 3 从)的 Redis 集群。 环境准备 Windows 10/11 操作系统Docker Desktop 已安装并运行 步骤 清理环境(如之前有尝试) 如果…

Zynq开发实践(SDK之第一个纯PS工程)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】学编程的时候,大家一般都比较重视第一个项目的创建和执行。第一个fpga程序一般是led闪烁,第一个c程序一般就是hello world程…

EJS(Embedded JavaScript)(一个基于JavaScript的模板引擎,用于在HTML中嵌入动态内容)

文章目录**1. 什么是 EJS?****2. 核心特点**- **接近原生 HTML**- **动态渲染**- **轻量高效**- **与 Express 深度集成****3. EJS 的基本语法****4. 示例代码****HTML 模板(views/user.ejs)****Express 中渲染模板****5. 使用场景**1. **服务…

Linux:基于阻塞队列的生产者消费模型

文章目录一、生产者消费者模型的基本原则💕💕生产者-消费者模型的 321 原则💕💕二、为何要使用生产者消费者模型1. 解耦2. 支持并发 (提高效率)3. 忙闲不均的支持三、基于 BlockingQueue 的生产者消费者模型…

ensp启动路由器报错40

1. 先关闭 eNSP 模拟器、关闭 Virtualbox2. 在everything里面搜索 .VirtualBox文件夹,然后删掉3. 再打开 eNSP,不添加任何模拟设备,单击“菜单-工具-注册设备”,将 AR_Base 重新注册。4. 关闭 eNSP 模拟器

代码随想录二刷之“图论”~GO

A.深搜与广搜(重点掌握!!!!) 深搜类似于回溯法 搜索方向,是认准一个方向搜,直到碰壁之后再换方向换方向是撤销原路径,改为节点链接的下一个路径,回溯的过程…