2015-06-29 2 views
0

я наткнулся на эти две линий (спина к спине) коды в проекте горелки:факел тензоров обменивать размеры

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

Что эти две линий? Я предположил, что они сделали какую-то замену.

+0

Имеет ли факел постоянные литералы таблицы? «{} == {}' возвращает true в факеле? Потому что без этого это фактически ничем не отличается, если использовать '= nil' как правую часть обеих этих строк. –

ответ

5

Это описано в индексировании в 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 никогда не читается.

Смежные вопросы