я наткнулся на эти две линий (спина к спине) коды в проекте горелки:факел тензоров обменивать размеры
im4[{1,{},{}}] = im3[{3,{},{}}]
im4[{3,{},{}}] = im3[{1,{},{}}]
Что эти две линий? Я предположил, что они сделали какую-то замену.
я наткнулся на эти две линий (спина к спине) коды в проекте горелки:факел тензоров обменивать размеры
im4[{1,{},{}}] = im3[{3,{},{}}]
im4[{3,{},{}}] = im3[{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
«с третьей строки (2D-суб-матрицы) до im4
- первая строка, а вторая строка присваивает первую строку im3
третьей строке im4
.
Обратите внимание, что это не своп, так как im3
никогда не записывается и im4
никогда не читается.
Имеет ли факел постоянные литералы таблицы? «{} == {}' возвращает true в факеле? Потому что без этого это фактически ничем не отличается, если использовать '= nil' как правую часть обеих этих строк. –