【问题标题】:Torch tensors swapping dimensions火炬张量交换尺寸
【发布时间】:2015-09-16 13:30:51
【问题描述】:

我在一个 Torch 项目中遇到了这两行(背靠背)代码:

 im4[{1,{},{}}] = im3[{3,{},{}}]
 im4[{3,{},{}}] = im3[{1,{},{}}]

这两行是做什么的?我以为他们做了某种交换。

【问题讨论】:

  • torch 是否有常量表文字? {} == {} 在火炬中返回 true 吗?因为如果没有它,那么使用= nil 作为这两行的右侧实际上没有什么不同。

标签: lua torch


【解决方案1】:

这在Torch Tensor Documentation中的索引中有所涉及

使用空表{} 进行索引是该维度中所有索引的简写。下面是一个使用{} 将整行从一个矩阵复制到另一个矩阵的演示:

> a = torch.Tensor(3, 3):fill(0)
     0 0 0
     0 0 0
     0 0 0

> b = torch.Tensor(3, 3)
> for i=1,3 do for j=1,3 do b[i][j] = (i - 1) * 3 + j end end
> b
     1 2 3
     4 5 6
     7 8 9

> a[{1, {}}] = b[{3, {}}]
> a
    7 8 9
    0 0 0
    0 0 0

这个赋值相当于:a[1] = b[3]

你的例子很相似:

 im4[{1,{},{}}] = im3[{3,{},{}}]
 im4[{3,{},{}}] = im3[{1,{},{}}]

更清楚的表述为:

 im4[1] = im3[3]
 im4[3] = im3[1]

第一行将im3的第三行(二维子矩阵)中的值分配给im4的第一行,第二行将im3的第一行分配给@的第三行987654331@.

请注意,这不是交换,因为永远不会写入 im3,永远不会读取 im4

【讨论】:

    猜你喜欢
    • 2022-07-20
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 2021-09-27
    • 2020-11-24
    • 1970-01-01
    • 2020-12-24
    • 2016-07-20
    相关资源
    最近更新 更多