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