Numpyのメソッドの一つ、pad
がよく分からなかったので、調べた内容をメモします。
.py
>>> data = [1,2,3]
>>> numpy.pad(data, [2,3], 'constant')
array([0, 0, 1, 2, 3, 0, 0, 0])
上記の引数の説明は以下のように書かれています。
- array : array_like of rank N
- Input array
- pad_width : {sequence, array_like, int}
- Number of values padded to the edges of each axis. ((before_1, after_1), ... (before_N, after_N)) unique pad widths for each axis. ((before, after),) yields same before and after pad for each axis. (pad,) or int is a shortcut for before = after = pad width for all axes.
- mode : str or function
第1引数にはN次元の配列、第2引数には前・後の文字詰め量、第3引数には埋め込み方式を指定します。
先の例だと元データdata
の前に2つ、後に3つの埋め込み値0
を連結します。
[0,0] + [1,2,3] + [0,0,0]
第2引数はタプルも可
.py
numpy.pad(data, (2,3), 'constant')
第3引数のmode
は色々指定ができて、edge
だと両端の値をコピーします。
- constant 標準
- edge 端の値をコピー
- linear_ramp 直線傾斜になる様に端を補完
- maximum 最大値で補完
- mean 平均値で補完
- median 中央値で補完
- minimum 最小値で補完
- reflect 反射して補完 - ABCBABCBA の様になる
- symmetric 対称な補完 - ABCCBAABC の様になる
- wrap 順序を模して補完
- empty 1.17以降使用可能
.py
>>> numpy.pad(data, (2,3), 'edge')
array([1, 1, 1, 2, 3, 3, 3, 3])
埋め込む値を変えるには名前付き引数でconstant_values
を指定します。
.py
>>> numpy.pad(data, (2,3), 'constant', constant_values=(8,9))
array([8, 8, 1, 2, 3, 9, 9, 9])
次は2次元データを見て見ます。
.py
>>> data = [[1,2,3],[4,5,6]]
>>> numpy.pad(data, (2,3), 'constant')
array([[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 2, 3, 0, 0, 0],
[0, 0, 4, 5, 6, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]])
>>> numpy.pad(data, (2,3), 'edge')
array([[1, 1, 1, 2, 3, 3, 3, 3],
[1, 1, 1, 2, 3, 3, 3, 3],
[1, 1, 1, 2, 3, 3, 3, 3],
[4, 4, 4, 5, 6, 6, 6, 6],
[4, 4, 4, 5, 6, 6, 6, 6],
[4, 4, 4, 5, 6, 6, 6, 6],
[4, 4, 4, 5, 6, 6, 6, 6]])
前後に値または配列がコピーされているのがわかります。
第2引数を配列にすることによって各ランクの幅量を変えられます。
.py
>>> numpy.pad(data, [(0,1),(2,3)], 'constant')
array([[0, 0, 1, 2, 3, 0, 0, 0],
[0, 0, 4, 5, 6, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]])
以上です。