pytorch api文档:torch.linspace()函数-生成均匀分布张量

介绍

PyTorch 中的 torch.linspace() 函数,这是生成 均匀分布张量 的核心工具,常用来创建 测试数据、坐标网格等。

作用

在指定的起始值和结束值之间,生成固定数量的、等间距的数值(线性间距),返回一个 1 维张量。

特点

不管起始/结束值是多少,生成的数值数量是固定的,且相邻数值的间隔相等;

应用场景

  • 绘制函数曲线:生成x轴的均匀采样点,计算y值后绘图(如正弦/余弦曲线);
  • 创建坐标网格:结合 torch.meshgrid() 生成二维坐标(如图像处理中的像素坐标);
  • 测试模型输入:生成固定范围的测试数据,验证模型输出的单调性/连续性;
  • 神经网络初始化:生成均匀分布的初始参数(虽不常用,但可作为基础工具)。

与 torch.arange() 区别

torch.arange():arange 按“步长”生成,数量不固定;linspace 按“数量”生成,步长不固定。

语法

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个元素

例子

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])

进阶示例:生成二维坐标网格

# 生成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 扩展维度适配多维计算。

原文出处:/show_1GW2eRAXuyNH.html