pytorch api文档:torch.empty()建一个未初始化的张量

介绍

torch.empty() 是 PyTorch 中用于创建一个 未初始化 的张量(Tensor)的函数。所谓“未初始化”,意思是张量里的数值是内存中随机的垃圾值(不是 0、1 等有意义的值),它只分配指定形状的内存空间,不填充数据,因此创建速度比 torch.zeros()/torch.ones() 更快。

语法格式

torch.empty(*size, dtype=None, device=None, requires_grad=False, pin_memory=False)

关键参数说明

参数 作用
*size 必选,指定张量的形状,比如 2,3 表示 2 行 3 列的二维张量
dtype 可选,指定张量的数据类型(如 torch.float32、torch.int64),默认与默认类型一致
device 可选,指定张量存储的设备(如 cpu、cuda:0)
requires_grad 可选,是否需要计算梯度,默认 False

注意

  • 数值随机:torch.empty() 创建的张量数值无意义,不能直接用于计算,必须后续通过赋值(如 x.fill_(0))、运算等方式填充有效数据。
  • 速度优势:相比 torch.zeros()/torch.ones(),torch.empty() 跳过了数据填充步骤,创建大张量时速度更快,适合需要先分配内存再手动填充数据的场景。
  • 替代场景:如果需要初始化有意义的值,优先用 torch.zeros()(全 0)、torch.ones()(全 1)、torch.rand()(随机数)等函数。

代码示例

示例 1:基础使用(创建未初始化张量)

import torch

# 创建 2x3 的未初始化浮点张量
x = torch.empty(2, 3)
print("未初始化的 2x3 张量:")
print(x)
# 输出示例(数值是随机的,每次运行结果不同):
# tensor([[1.4013e-45, 0.0000e+00, 0.0000e+00],
#         [0.0000e+00, 0.0000e+00, 0.0000e+00]])

# 创建 1 维(长度为 5)的未初始化整型张量
y = torch.empty(5, dtype=torch.int64)
print("\n未初始化的 1 维整型张量:")
print(y)
# 输出示例:tensor([4614256650376698880,                   0, 4614260818437744640,
#                     4614262402468269056, 4614263986498793472])

示例 2:指定设备(GPU)

# 先检查是否有可用的 GPU
if torch.cuda.is_available():
    # 在 GPU 上创建 3x2 的未初始化张量
    z = torch.empty(3, 2, device="cuda:0")
    print("\nGPU 上的未初始化张量:")
    print(z)
    print("张量设备:", z.device)  # 输出:cuda:0

总结

  1. torch.empty() 的核心作用是创建指定形状的未初始化张量,仅分配内存,不填充数据。
  2. 特点是创建速度快,但张量内数值为随机垃圾值,需手动填充有效数据后才能使用。
  3. 常用参数:size(形状)、dtype(数据类型)、device(存储设备)。

原文出处:/show_1GW2ao0Cqais.html