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