我将尝试在Theano中实现numpy的pad函数,以constant模式为例。在numpy中如何实现这个函数?假设填充值仅为0。
给定一个数组
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]])
现在,如果我事先知道a的维度数量,我可以通过创建一个新数组来实现这一点,该数组的新维度填充填充值,并填写此数组中的相应元素。但是,如果我不知道输入数组的维度呢?虽然我仍然可以从输入数组推断出输出数组的维度,但如果不知道其中的维度数量,则无法对其进行索引。或者我错过了什么吗?
也就是说,如果我知道输入维度是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
其中的 zeros 数组是使用输出维度创建的新数组。
但如果我事先不知道 ndim,我就无法这样做。
np.pad
的源代码在这里:https://github.com/numpy/numpy/blob/master/numpy/lib/arraypad.py - jmilloy