当前位置:  开发笔记 > 编程语言 > 正文

零填充数据,直到其长度等于2的幂

如何解决《零填充数据,直到其长度等于2的幂》经验,为你挑选了1个好方法。

我正在尝试编写一个可以对某些数据进行零填充的函数,直到其长度等于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

部分但我不知道如何提高效率.



1> viraptor..:

您不必通过每次增加填充来迭代.只需计算出您需要的下一个尺寸.总的下一个尺寸是2**int(log2(current_size)+1).

然后你可以减去current_size并知道你需要多少填充.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有