48828


[pytorch](/questions/tagged/pytorch "'pytorch'
のタグが付いた質問を表示")の関数`gather`の処理内容が公式ドキュメントを読んでもよく分かりません。  
例えば **Example** の`t`が、どのような計算をした結果、出力のようなテンソルになるのか、  
具体的に教えていただけないでしょうか。

**Example:**  

[code]

    >>> t = torch.tensor([[1,2],[3,4]])
    　　　　>>> torch.gather(t, 1, torch.tensor([[0,0],[1,0]]))
    　　　　tensor([[ 1,  1],
    　　　　        [ 4,  3]])
    
[/code]

`dim = 0`だと、上記の入力tは下記のような出力になります。

[code]

    tensor([[1, 2],
            [3, 2]])
    
[/code]

**公式ドキュメント：**  
<https://pytorch.org/docs/stable/torch.html#torch.gather>

ご回答、何卒宜しくお願い致します。


CC BY-SA 4.0
2018-09-29T09:12:54.127
48822
2018-09-29T12:15:37.870
2018-09-29T09:33:38.203
24284
30280
question
python pytorch
pytorchの関数gatherの処理内容について


公式ドキュメントを拝見いたしました。3Dのテンソルに対する計算式が載っていますね。  
これを2Dのテンソルに置き換えるには、添え字のkと書かれた部分を削除すればok。

[code]

    out[i][j] = input[index[i][j]][j]  # if dim == 0
    out[i][j] = input[i][index[i][j]]  # if dim == 1
    
[/code]

この定義式通りに動いているように思います。  
下記は理解しやすいかどうかわからないですが、対応関係が見えるように行列を配置してみました。

[code]

    #dim==0の時 indexは行番号を表しており、その行番号に対するinputの値をoutputとする
    #列方向に対してはinputとoutputは同じ列を見ている。
     input
       1 2     
       3 4  
    
     index
       0 0
       1 0                 
    
    output                      #output
       1 2     #input[0][0] input[0][1]
       3 2     #input[1][0] input[0][1] 
    
    #dim==1の時 indexは列番号を表しており、その列番号に対するinputの値をoutputとする
    #行方向に対してはinputとoutputは同じ行を見ている。
    input  index  output                     #output
      1 2    0 0     1 1    #input[0][0] input[0][0]
      3 4    1 0     4 3    #input[1][1] input[1][0]
    
[/code]


CC BY-SA 4.0
2018-09-29T11:57:30.123
48828
2018-09-29T12:15:37.870
2018-09-29T12:15:37.870
25980
25980
48822
answer