pytorch api文档:torch.empty()建一个未初始化的张量 作者:马育民 • 2026-01-14 22:13 • 阅读:10000 # 介绍 `torch.empty()` 是 PyTorch 中用于创建一个 **未初始化** 的张量(Tensor)的函数。所谓“未初始化”,意思是张量里的数值是内存中随机的垃圾值(不是 0、1 等有意义的值),它只分配指定形状的内存空间,不填充数据,因此创建速度比 `torch.zeros()`/`torch.ones()` 更快。 # 语法格式 ```python 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:基础使用(创建未初始化张量) ```python 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) ```python # 先检查是否有可用的 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`(存储设备)。 原文出处:http://www.malaoshi.top/show_1GW2ao0Cqais.html