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

PyTorch张量(Tensor)创建的方式汇总详解和代码示例

在 PyTorch 中,张量(Tensor)是所有计算的基础数据结构,类似于 NumPy 的 ndarray,但支持 GPU 运算与自动求导。下面详细汇总 PyTorch 中张量的创建方式及其代码示例


一、基于数据创建张量

1. torch.tensor(data)

将列表、元组、NumPy 数组等数据直接转为张量。

import torch
import numpy as np# 从列表创建
a = torch.tensor([1, 2, 3])
print(a)# 从嵌套列表创建多维张量
b = torch.tensor([[1, 2], [3, 4]])
print(b)# 从 NumPy 创建
c = torch.tensor(np.array([5, 6, 7]))
print(c)

二、创建特定值的张量

2. torch.zeros(size)

创建所有元素为 0 的张量。

a = torch.zeros(2, 3)  # shape: (2, 3)
print(a)

3. torch.ones(size)

创建所有元素为 1 的张量。

b = torch.ones(3, 2)
print(b)

4. torch.full(size, fill_value)

创建所有元素为指定值的张量。

c = torch.full((2, 2), 7)
print(c)

三、创建随机值张量

5. torch.rand(size)

[0, 1) 范围内均匀分布的随机值。

a = torch.rand(2, 3)
print(a)

6. torch.randn(size)

标准正态分布(均值为 0,标准差为 1)。

b = torch.randn(2, 3)
print(b)

7. torch.randint(low, high, size)

创建整数张量,区间 [low, high)

c = torch.randint(0, 10, (2, 3))
print(c)

四、创建单位矩阵与对角矩阵

8. torch.eye(n, m=None)

创建一个单位矩阵(对角为 1,其余为 0)。

a = torch.eye(3)      # 3x3单位矩阵
b = torch.eye(3, 4)   # 3x4单位矩阵
print(a, b)

五、使用范围和步长创建张量

9. torch.arange(start, end, step)

类似于 Python 中的 range

a = torch.arange(0, 10, 2)  # [0, 2, 4, 6, 8]
print(a)

10. torch.linspace(start, end, steps)

生成固定步数的等间距值。

b = torch.linspace(0, 1, 5)  # [0., 0.25, 0.5, 0.75, 1.]
print(b)

六、创建与已有张量相似的新张量

11. tensor.new_*(...) 系列(不推荐)

例如:

a = torch.tensor([1.0, 2.0, 3.0])
b = a.new_zeros(2, 2)
print(b)

12. torch.zeros_like(tensor)

根据已有张量形状创建新张量。

a = torch.ones(2, 3)
b = torch.zeros_like(a)
c = torch.ones_like(a)
d = torch.randn_like(a)
print(b, c, d)

七、张量创建时指定设备和数据类型

你可以指定 dtypedevice

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')a = torch.ones((2, 2), dtype=torch.float32, device=device)
print(a)

八、从 NumPy 转换 / 转回

13. torch.from_numpy(ndarray)

共享内存,修改张量或数组都会影响另一个。

import numpy as nparr = np.array([[1, 2], [3, 4]])
tensor = torch.from_numpy(arr)
print(tensor)

14. .numpy()

将张量转为 NumPy 数组(要求在 CPU 上)。

a = torch.tensor([[1, 2], [3, 4]])
np_array = a.numpy()
print(np_array)

九、其他高级初始化方式

15. torch.empty(size)

创建未初始化的张量(内存内容不确定,运行速度快)。

a = torch.empty(2, 2)
print(a)

十、使用 requires_grad 创建可求导张量

a = torch.ones(2, 2, requires_grad=True)
print(a)

总结:张量创建方法对比表

方法说明是否可指定 dtype/device
torch.tensor()从数据创建张量
torch.zeros()全为 0
torch.ones()全为 1
torch.full()全为指定值
torch.rand()均匀分布 [0, 1)
torch.randn()标准正态分布
torch.randint()随机整数
torch.eye()单位矩阵
torch.arange()区间整型值序列
torch.linspace()区间等间隔浮点数
torch.empty()未初始化张量
torch.from_numpy()NumPy 转张量❌(dtype 不可变)
tensor.numpy()张量转 NumPy❌(仅 CPU 张量)

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

相关文章:

  • 鸿蒙Next开发,配置Navigation的Route
  • 26-计组-多处理器
  • HCIA认证核心知识体系全解析
  • OpenCV计算机视觉实战(15)——霍夫变换详解
  • Mars3d的走廊只能在一个平面的无法折叠的解决方案
  • UNet 改进(36):引入ELAN-FR模块(通道注意力+空间注意力)
  • 华为OD 消消乐游戏
  • 机器学习/深度学习训练day1
  • 第十五节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - vue前端 生产部署
  • Java 中的类加载机制:从 Class 文件到内存中的类
  • 11、鸿蒙Harmony Next开发:列表布局 (List)
  • Mysql用户管理及在windows下安装Mysql5.7(压缩包方式)远程连接云服务器(linux)上的Mysql数据库
  • spring bean初始化异步执行
  • Java字符串、时间、数字知识点
  • dify 原生mcp应用案例
  • 美丽田园发布盈喜公告,预计净利增长超35%该咋看?
  • 【Linux-云原生-笔记】Rsyslog日志相关
  • AI进化论13:生成式AI的浪潮——AI不光能“说”,还能“画”和“拍”
  • 编译器 VS 解释器
  • YOLOv11开发流程
  • Linux 基础操作:vim 编辑器、网络配置与远程登录全解析
  • 学习笔记(36):用概率密度方式来了解:正态分布拟合曲线
  • sqlserver迁移日志文件和数据文件
  • java学习 day4 分布式锁
  • 《Librosa :一个专为音频信号处理和音乐分析设计的Python库》
  • 阿里云可观测 2025 年 3 月产品动态
  • APK安装器(安卓端)一键解除VX限制!轻松安装各种手机应用
  • VScode设计平台demo&前端开发中的常见问题
  • 中级统计师-经济学基础知识-第五章 国民收入决定的总收入-总支出模型
  • RK3568/3588 Android 12 源码默认使用蓝牙mic录音