pytorch api文档:torch.linspace()函数-生成均匀分布张量 作者:马育民 • 2026-01-24 16:31 • 阅读:10001 # 介绍 PyTorch 中的 `torch.linspace()` 函数,这是生成 **均匀分布张量** 的核心工具,常用来创建 **测试数据**、坐标网格等。 ### 作用 **在指定的起始值和结束值之间,生成固定数量的、等间距的数值**(线性间距),返回一个 1 维张量。 ### 特点 不管起始/结束值是多少,生成的数值数量是固定的,且相邻数值的间隔相等; ### 应用场景 - **绘制函数曲线**:生成x轴的均匀采样点,计算y值后绘图(如正弦/余弦曲线); - **创建坐标网格**:结合 `torch.meshgrid()` 生成二维坐标(如图像处理中的像素坐标); - **测试模型输入**:生成固定范围的测试数据,验证模型输出的单调性/连续性; - **神经网络初始化**:生成均匀分布的初始参数(虽不常用,但可作为基础工具)。 ### 与 torch.arange() 区别 `torch.arange()`:`arange` 按“步长”生成,数量不固定;`linspace` 按“数量”生成,步长不固定。 # 语法 ```python torch.linspace(start, end, steps=100, dtype=None, device=None, requires_grad=False) ``` #### 参数 - `start`:序列的起始值(必传); - `end`:序列的结束值(必传,**包含该值**); - `steps`:生成的数值数量,默认 100; - `dtype`:输出张量的数据类型(如 `torch.float32`),默认继承 `start/end` 的类型; - `device`:张量所在设备(如 `cuda:0`); - `requires_grad`:是否需要梯度,默认 False。 ### 返回值 返回一维向量,有100个元素 # 例子 ```python import torch # ========== 示例1:基础用法(默认steps=100) ========== # 生成0到1之间的100个等间距数值(包含0和1) x1 = torch.linspace(0, 1) print("默认steps的张量形状:", x1.shape) # torch.Size([100]) print("第一个值:", x1[0], "最后一个值:", x1[-1]) # tensor(0.) tensor(1.) print("步长:", x1[1] - x1[0]) # tensor(0.0101)(1/99≈0.0101) # ========== 示例2:指定steps数量 ========== # 生成0到10之间的5个等间距数值(包含0和10) x2 = torch.linspace(0, 10, steps=5) print("\nsteps=5的张量:", x2) # 输出: tensor([ 0.0000, 2.5000, 5.0000, 7.5000, 10.0000]) print("步长:", x2[1] - x2[0]) # tensor(2.5)(10/4=2.5) # ========== 示例3:起始值 > 结束值(反向生成) ========== # 生成10到0之间的3个等间距数值 x3 = torch.linspace(10, 0, steps=3) print("\n反向生成的张量:", x3) # tensor([10., 5., 0.]) # ========== 示例4:指定数据类型和设备 ========== # 生成float64类型、cuda设备的张量(需有GPU) x4 = torch.linspace(-5, 5, steps=4, dtype=torch.float64, device="cpu") # 替换为cuda:0可测试GPU print("\n指定dtype的张量:", x4) # 输出: tensor([-5.0000, -1.6667, 1.6667, 5.0000], dtype=torch.float64) # ========== 示例5:生成二维张量(结合unsqueeze) ========== # 先生成1维张量,再扩展维度(常用在绘图/网络输入) x5 = torch.linspace(0, 2*torch.pi, steps=100).unsqueeze(1) # 形状变为 [100, 1] y5 = torch.sin(x5) # 计算正弦值,适配二维形状 print("\n二维张量形状:", x5.shape) # torch.Size([100, 1]) ``` #### 进阶示例:生成二维坐标网格 ```python # 生成x轴(-2到2,20个点)和y轴(-2到2,20个点) x = torch.linspace(-2, 2, steps=20) y = torch.linspace(-2, 2, steps=20) # 生成网格坐标 xx, yy = torch.meshgrid(x, y, indexing="xy") print("网格xx形状:", xx.shape) # torch.Size([20, 20]) print("网格yy形状:", yy.shape) # torch.Size([20, 20]) # xx[i][j] = x[j], yy[i][j] = y[i],构成二维平面的坐标点 ``` # 总结 1. `torch.linspace(start, end, steps)` 生成 `start` 到 `end` 之间的 `steps` 个等间距数值,**包含end值**; 2. 核心区别于 `torch.arange()`:`linspace` 定数量、步长自适应;`arange` 定步长、数量自适应; 3. 常用场景:绘制函数曲线、生成坐标网格、创建测试数据,可通过 `unsqueeze` 扩展维度适配多维计算。 原文出处:http://malaoshi.top/show_1GW2eRAXuyNH.html