PyTorch meshgrid 生成网格坐标

torch.meshgrid(*tensors, indexing=None)

使用输入的 1-D 张量创建网格坐标

示例

  1. indexing=‘xy’
import torch

a = torch.arange(3)
b = torch.arange(3, 6)

x, y = torch.meshgrid(a, b, indexing='xy')
print('x =', x, sep='\n')
print('y =', y, sep='\n')

输出:

x =
tensor([[0, 1, 2],
        [0, 1, 2],
        [0, 1, 2]])
y =
tensor([[3, 3, 3],
        [4, 4, 4],
        [5, 5, 5]])

PyTorch meshgrid 生成网格坐标_第1张图片

输入的 a, b 张量分别作为横坐标和纵坐标, 组合形成 3x3 的坐标元组, 每个坐标元组的第一个元素是横坐标, 第二个元素是纵坐标

按位置提取所有坐标元组的第一个元素, 得到输出 x, 提取第二个元素得到输出 y

torch.meshgrid(*tensors) currently has the same behavior as calling numpy.meshgrid(*arrays, indexing=’ij’).
In the future torch.meshgrid will transition to indexing=’xy’ as the default.

在未来的 PyTorch 版本, indexing 的默认参数将改为 ‘xy’, 等价于 Numpy.meshgrid(*arrays) 函数

  1. indexing=‘ij’

现版本的 indexing 参数默认为 ‘ij’, 等价于 Numpy.meshgrid(*arrays, indexing=‘ij’) 函数

>>> import torch
>>> a = torch.arange(3)
>>> b = torch.arange(3, 6)
>>> x, y = torch.meshgrid(a, b, indexing='ij')
>>> x
tensor([[0, 0, 0],
        [1, 1, 1],
        [2, 2, 2]])
>>> y
tensor([[3, 4, 5],
        [3, 4, 5],
        [3, 4, 5]])

与 indexing=‘xy’ 不同, indexing=‘ij’ 时, 输入的 a 张量 (0 1 2) 是作为纵坐标的, 而且坐标元组中纵坐标排在第一个元素, 输出的 x 张量对应纵坐标元素

PyTorch meshgrid 生成网格坐标_第2张图片

从输出结果来看, 两种 indexing 参数生成的张量互为转置关系

其他

以上示例创建的都是二维网格坐标, 如果输入 3 个 1-D 张量, 得到是三维网格坐标

你可能感兴趣的:(PyTorch,pytorch)