LoginSignup
83
44

More than 3 years have passed since last update.

numpy.padの使い方が分からなかったのでメモ

Last updated at Posted at 2018-02-17

Numpyのメソッドの一つ、padがよく分からなかったので、調べた内容をメモします。

numpy.pad

>>> 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引数はタプルも可

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以降使用可能
>>> numpy.pad(data, (2,3), 'edge')
array([1, 1, 1, 2, 3, 3, 3, 3])

埋め込む値を変えるには名前付き引数でconstant_valuesを指定します。

>>> numpy.pad(data, (2,3), 'constant', constant_values=(8,9))
array([8, 8, 1, 2, 3, 9, 9, 9])

次は2次元データを見て見ます。

>>> 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引数を配列にすることによって各ランクの幅量を変えられます。

>>> 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]])

以上です。

83
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
83
44