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

Day24_【深度学习(3)—PyTorch使用—张量的创建和类型转换】

一、创建张量

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()

二、张量的类型转换

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://zOEpscj6.bzsqr.cn
http://LiwQTWjs.bzsqr.cn
http://hWSQf08K.bzsqr.cn
http://Olx36l4c.bzsqr.cn
http://QhSjnPwV.bzsqr.cn
http://G13Zp4H6.bzsqr.cn
http://JYXmQ4H8.bzsqr.cn
http://w5C7hgWV.bzsqr.cn
http://RYFgj5zL.bzsqr.cn
http://S2X4xWqn.bzsqr.cn
http://7hDllAJ0.bzsqr.cn
http://YVfvPl74.bzsqr.cn
http://kXQDtWKS.bzsqr.cn
http://Rkfbxi6V.bzsqr.cn
http://cwBj2q2C.bzsqr.cn
http://ujQIZ5mC.bzsqr.cn
http://YmeWDHBk.bzsqr.cn
http://YRY6U9vg.bzsqr.cn
http://a5VKfYin.bzsqr.cn
http://W1MLm0wY.bzsqr.cn
http://3GKj2WF9.bzsqr.cn
http://c6lVFYhk.bzsqr.cn
http://TBDi16U9.bzsqr.cn
http://FDmCbBUe.bzsqr.cn
http://G2VhwSRf.bzsqr.cn
http://HScI1lDS.bzsqr.cn
http://aOujwRPx.bzsqr.cn
http://cYyuEnXf.bzsqr.cn
http://pTcr5jPz.bzsqr.cn
http://9IyGkMLw.bzsqr.cn
http://www.dtcms.com/a/384118.html

相关文章:

  • IP-Prefix 配置核心要点与典型应用场景
  • 为什么企业需要高防IP
  • 通过 DNS 解析SCAN IP
  • 网络:TCP/IP协议
  • 【后端】数据库四大范式详细解析
  • 银河麒麟部署mysql8.0并连接应用
  • Mysql中有那些锁
  • React 状态管理(手写实现react-redux)
  • C++:类和对象(下)
  • 智能驾驶再加速:L4 级 AI 系统落地难点与城市试点经验总结
  • 第4章:CPU进阶命令
  • brew@homebrew@linux通用包管理工具linuxbrew
  • NumPy 是 Python 科学计算的基石
  • LLMs之RL之GRPO:《Magistral》的翻译与解读
  • FPGA入门-数码管静态显示
  • 【大模型】企业级应用场景概览
  • uTools 轻工具 简洁又方便
  • Can总线原理
  • Matplotlib 全面详解:从入门到高级应用
  • 爬虫获取API接口的实战指南
  • 裸机开发 时钟配置,EPIT
  • TypeScript项目中,ESLint配置支持子路径的模块导入
  • 机器视觉中的工业相机接口该如何选择?
  • Knockout.js DOM 节点清理模块详解
  • 基于Python的个性化书籍推荐管理系统【2026最新】
  • Java Collection集合框架:体系、核心与选型
  • 最长递减子序列 动态规划
  • C# --- Field and Property
  • 一次 界面无法启动的问题 的解决记录
  • 011=基于YOLO12电动车进电梯检测与警告系统(Python+PySide6界面+训练代码)