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

相关文章:

  • 如何降低AIGC的查重率?精选六个AIGC降重让论文更出色
  • 《每日AI-人工智能-编程日报》--2025年7月14日
  • Android Studio C++/JNI/Kotlin 示例 三
  • git项目,有idea文件夹,怎么去掉
  • Mybatis(黑马)
  • 网络传输过程
  • 理解Linux文件系统:从物理存储到统一接口
  • 小波变换 | 离散小波变换
  • 学习笔记——农作物遥感识别与大范围农作物类别制图的若干关键问题
  • rsyslog简单应用
  • Linux中的系统日志(Rsyslog)
  • 算法训练营day17 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
  • Linux —— A / 基础指令
  • 深入解析Hadoop YARN架构设计:从原理到实践
  • 019 进程控制 —— 进程程序替换
  • SpringMVC2
  • 力扣-138.随机链表的复制
  • 一分钟K线实时数据数据接口,逐笔明细数据接口,分时成交量数据接口,实时五档委托单数据接口,历史逐笔明细数据接口,历史分时成交量数据接口
  • 深入理解MyBatis延迟加载:原理、配置与实战优化
  • 美丽田园发布盈喜公告,预计净利增长超35%该咋看?
  • 现场设备无法向视频汇聚EasyCVR视频融合平台推流的原因排查与解决过程
  • CA-IS3082W 隔离485 收发器芯片可能存在硬件BUG
  • 第十五节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - vue前端 生产部署
  • Laravel 中 chunk 分页漏掉数据?深度解析原因与解决方案
  • Unity3D + VS2022连接雷电模拟器调试
  • 4、qt窗口(沉淀中)
  • iOS APP 上架流程:跨平台上架方案的协作实践记录
  • ConcurrentHashMap 原子操作详解:computeIfAbsent、computeIfPresent和putIfAbsent
  • C语言-数据输入与输出
  • 《甘肃棒球》国家级运动健将标准·棒球1号位