如何用PyTorch创建各维度范围为0到1的二维点张量?
用PyTorch生成二维网格点张量
你可以通过以下两种简洁的方式实现需求:
方法一:利用torch.meshgrid构建网格
先生成一维间隔张量,再通过网格函数生成二维坐标,最后拼接成目标形状:
import torch # 生成0到1、步长0.2的一维张量 step_tensor = torch.arange(0, 1, 0.2) # 生成二维网格矩阵,indexing='xy'对应笛卡尔坐标系 x_grid, y_grid = torch.meshgrid(step_tensor, step_tensor, indexing='xy') # 将网格展平后按列拼接,得到(25, 2)的张量 result = torch.stack([x_grid.flatten(), y_grid.flatten()], dim=1) print(result)
输出结果完全匹配预期格式:meshgrid生成的x_grid每行重复一维张量的值,y_grid每列重复一维张量的值,展平后拼接就得到所有坐标组合。
方法二:使用torch.cartesian_prod直接生成笛卡尔积(PyTorch 1.10+)
如果你的PyTorch版本在1.10及以上,直接调用笛卡尔积函数可以一步到位:
import torch step_tensor = torch.arange(0, 1, 0.2) # 生成两个一维张量的笛卡尔积,结果即为(25, 2)的坐标张量 result = torch.cartesian_prod(step_tensor, step_tensor) print(result)
该函数会自动生成所有元素的组合,顺序完全符合需求:先固定第一个维度的取值,遍历第二个维度的所有值,再切换第一个维度的下一个取值,以此类推。
内容的提问来源于stack exchange,提问作者Peyman
相关产品推荐
相关产品推荐

