我正在尝试编写一个可以对某些数据进行零填充的函数,直到其长度等于2的最接近的较高幂.我还希望能够对此进行一定数量的迭代.现在这是我的功能:
def pad_to_next_2n(array, iterations = 1): n = 1 while n <= iterations: l = len(array) padding = l +1 #incase array is already length equal to 2^n while np.log2(padding) % 1 != 0: padding += 1 if l % 2 == 0: total_padding = padding - l array = np.pad(array, (total_padding/2,), 'constant') n += 1 else: total_padding = padding - l left_padding = (total_padding - 1)/2 right_padding = total_padding - left_padding print total_padding print left_padding print right_padding array = np.pad(array, (left_padding, right_padding), 'constant') n += 1 return array
这确实有效,但是对于高于5的迭代来说它确实很慢.我想知道是否有人可以帮助提高速度或者看到更好的方法.我相信最大的问题来自于
while np.log2(padding) % 1 != 0: padding += 1
部分但我不知道如何提高效率.
您不必通过每次增加填充来迭代.只需计算出您需要的下一个尺寸.总的下一个尺寸是2**int(log2(current_size)+1)
.
然后你可以减去current_size
并知道你需要多少填充.