定数モードの場合、numanoパッド関数をtheanoに実装しようとしています。それはnumpyでどのように実装されていますか?そのパッドの値が配列numpyパッドの実装方法(定数値の場合)
a = np.array([[1,2,3,4],[5,6,7,8]])
# pad values are just 0 as indicated by constant_values=0
np.pad(a, pad_width=[(1,2),(3,4)], mode='constant', constant_values=0)
が、私は事前の次元数を知っていれば、私はちょうど作成することで、これを実装することができます今すぐ
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0],
[0, 0, 0, 5, 6, 7, 8, 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
あると仮定新しい次元の新しい配列がパッドの値を埋め、この配列の対応する要素を埋めます。しかし、もし私が入力配列の寸法を知らないのであれば?入力配列から出力配列の次元を推測することはできますが、配列の次元数を知らなくてもインデックスを作成する方法はありません。または私は何かを逃していますか?
私は入力次元が、私は何ができる、3、言っていることがわかっている場合は、次のとおりです。
zeros_array[pad_width[0][0]:-pad_width[0][1], pad_width[1][0]:-pad_width[1][1], pad_width[2][0]:-pad_width[2][1]] = a
ゼロ列が出力寸法で作成された新しい配列です。
しかし、手前のndimがわからない場合は、これを行うことはできません。換言すれば、
def ...(arg, pad):
out_shape = <arg.shape + padding> # math on tuples/lists
idx = [slice(x1, x2) for ...] # again math on shape and padding
res = np.zeros(out_shape, dtype=arg.dtype)
res[idx] = arg # may need tuple(idx)
return res
対象の配列を作成し、適切なインデックスタプルで入力をコピーします。
'np.pad'のソースはhttps://github.com/numpy/numpy/blob/master/numpy/lib/arraypad.pyです。 – jmilloy