#1.はじめに
np.padの使い方が良くわからなかったので、調べた結果を備忘録として残します。
#2.1次元配列
# 1次元配列
img = np.array([1, 2, 3])
print(img)
print('img.shape = ', img.shape)
img = np.pad(img, [(1,2)], 'constant')
print(img)
img = np.pad(img, [(左0埋め数, 右0埋め数)], 'constant')
#3.2次元配列
# 2次元配列
img = np.array([[1, 2, 3], [4, 5, 6]])
print(img)
print('img.shape = ', img.shape)
img = np.pad(img, [(1,2), (3, 4)], 'constant')
print(img)
img = np.pad(img, [(上0埋め数, 下0埋め数), (左0埋め数, 右0埋め数)], 'constant')
#4.3次元配列
# 3次元配列
img = np.array( [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [0, 1, 2]]])
print(img)
print('img.shape = ', img.shape)
img = np.pad(img, [(1,0), (1, 1), (1, 1)], 'constant')
print(img)
今までは画像のパディングだけでしたが、今度はその画像の前後に0画像(全て0で埋め尽くされたもの)を何枚入れるか指定します。ここでは、前に1枚入れています。つまり、
img = np.pad(img, [(前0画像数, 後0画像数), (上0埋め数, 下0埋め数), (左0埋め数, 右0埋め数)], 'constant')
#5.4次元配列
# 4次元配列
img = np.array([[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9],[0, 1, 2]]]])
print(img)
print('img.shape = ', img.shape)
img = np.pad(img, [(1,0), (1,0), (1, 1), (1, 1)], 'constant')
print(img)
今度は、今まで作成した画像(パディングした画像+0画像)の枚数分の0画像を、さらに前後に指定セット分追加します。ここでは、前に1セット入れています。つまり、
img = np.pad(img, [(前0画像セット数, 後0画像セット数), (前0画像数, 後0画像数), (上0埋め数, 下0埋め数), (左0埋め数, 右0埋め数)], 'constant')
#6.実際の使い方例
4次元配列 img (ミニバッチサイズ、チャンネル数、縦幅、横幅)のパディング処理をする場合を考えてみます。縦方向のパディングを p_h, 横方向のパディングを p_w とします。バッチ方向やチャンネル方向のパディングは不要なので、
img = np.pad(img, [(0, 0), (0, 0), (p_h, p_h), (p_w, p_w)], 'constant')