

以下のように、サイズの異なる行列の集合Aが与えられた時、

[code]

    A = 
    [[[1, 2, 3],
      [1, 2, 3],
      [1, 2, 3]],
     [[1, 2],
      [1, 2],
      [1, 2],
      [1, 2]],
     [[1, 2, 3, 4],
      [1, 2, 3, 4]]]
    
[/code]

以下のように、0でパディングして全体を連結させて、1つの行列にしたいです。

[code]

    B =
    [[1, 2, 3, 0],
     [1, 2, 3, 0],
     [1, 2, 3, 0],
     [1, 2, 0, 0],
     [1, 2, 0, 0],
     [1, 2, 0, 0],
     [1, 2, 0, 0],
     [1, 2, 3, 4],
     [1, 2, 3, 4]]
    
[/code]

Chainerで上のような入力と出力を実現するためには、  
どのようなコードを書けば良いでしょうか？  
AとBはnumpy array型です。


CC BY-SA 3.0
2017-12-30T13:37:34.027
40628
2017-12-30T15:21:09.790
2017-12-30T14:06:00.063
25649
25649
question
python chainer
サイズの異なる行列の集合をパディングしてサイズを揃えたい


一旦、リストに変換します。

[code]

    import numpy as np
    
    A = np.array([
     [[1, 2, 3],
      [1, 2, 3],
      [1, 2, 3]],
     [[1, 2],
      [1, 2],
      [1, 2],
      [1, 2]],
     [[1, 2, 3, 4],
      [1, 2, 3, 4]]])
    
    ## Flatten
    X = sum(A.tolist(), [])
    ## Max size
    l = max(map(len, X))
    ## Padding
    B = np.array(map(lambda x: x + [0]*(l-len(x)), X))
    
    B
    =>
    array([[1, 2, 3, 0],
           [1, 2, 3, 0],
           [1, 2, 3, 0],
           [1, 2, 0, 0],
           [1, 2, 0, 0],
           [1, 2, 0, 0],
           [1, 2, 0, 0],
           [1, 2, 3, 4],
           [1, 2, 3, 4]])
    
[/code]


CC BY-SA 3.0
2017-12-30T15:21:09.790
40629
2017-12-30T15:21:09.790
40628
answer