PyTorch学习(1):torch.meshgrid的使用

本文详细介绍了PyTorch中的torch.meshgrid函数,用于生成二维网格,区分了行优先和列优先模式,并在深度学习工程中如何使用它创建索引矩阵。
摘要由CSDN通过智能技术生成

1. 简述


torch.meshgrid


生成网格,可以用于生成坐标。函数输入两个数据类型相同的一维张量,两个输出张量的行数为第一个输入张量的元素个数,列数为第二个输入张量的元素个数,当两个输入张量数据类型不同或维度不是一维时会报错。

原型


torch.meshgrid(*tensors, indexing=None)

indexing = ‘ij’ 行优先(默认)

indexing = ‘xy’ 列优先


2. 行优先

第一个Tensor确定行数,和每行的值,然后向右复制。

也可以看做是确定了第一列。

第二个Tensor确定列数,以及每一列的值,然后向下复制。

一般情况下,torch.meshgrid的输入参数中,有两个tensor,均应该是一维的tensor。如torch.meshgrid(a_tensor, b_tensor, indexing=’ij’),表示首先把a_tensor当做第一列,然后根据b_tensor的元素数量,确定复制几列。

总结起来就是“向右向下复制”

3. 列优先

与“列优先”相反,第一个Tensor先确定列数和每列的取值,第二个Tensor先确定行数和每行的取值。

4. 行优先举例

sx = torch.arange(end=5)

sy = torch.arange(end=6)

sy, sx = torch.meshgrid(sy, sx, indexing='ij')

print(f"sy: {sy}")

print(f"sx: {sx}")

得到结果如下所示:

sy: tensor([[0, 0, 0, 0, 0],

            [1, 1, 1, 1, 1],

            [2, 2, 2, 2, 2],

            [3, 3, 3, 3, 3],

            [4, 4, 4, 4, 4],

            [5, 5, 5, 5, 5]])

sx: tensor([[0, 1, 2, 3, 4],

            [0, 1, 2, 3, 4],

            [0, 1, 2, 3, 4],

            [0, 1, 2, 3, 4],

            [0, 1, 2, 3, 4],

            [0, 1, 2, 3, 4]])

可以看出如下特征:

sy首先确定了行数,以及每一行的取值,另一种理解可以是。之后相当于复制多列,具体复制多少列呢,取决于sx的元素数量。

sx首先确定了列数,以及每一列的取值,然后复制多行。

5. 列优先举例

sx = torch.arange(end=5)

sy = torch.arange(end=6)

sy, sx = torch.meshgrid(sy, sx, indexing='xy')

print(f"sy: {sy}")

print(f"sx: {sx}")

得到的结果如下所示:

sy: tensor([[0, 1, 2, 3, 4, 5],

            [0, 1, 2, 3, 4, 5],

            [0, 1, 2, 3, 4, 5],

            [0, 1, 2, 3, 4, 5],

            [0, 1, 2, 3, 4, 5]])

sx: tensor([[0, 0, 0, 0, 0, 0],

            [1, 1, 1, 1, 1, 1],

            [2, 2, 2, 2, 2, 2],

            [3, 3, 3, 3, 3, 3],

            [4, 4, 4, 4, 4, 4]])

如上所示,可以看出如下特征:

sy首先确定了列数和每一列的取值,即确定了第一行。之后根据sx的元素数量确定复制几行。

sx首先确定了行数,以及每一行的取值,然后复制多列。

6. 特别说明

我们在基于PyTorch框架开发深度学习工程时,有时会制作Tensor的索引矩阵,此时应该是用行优先模式,即:sy, sx = torch.meshgrid(sy, sx, indexing='ij')这一种形式,然后将sy和sx进行torch.stack结合操作。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值