Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python快速地将整数转换为特定长度的位数_Python_Integer_Bits_Typeconverter - Fatal编程技术网

Python快速地将整数转换为特定长度的位数

Python快速地将整数转换为特定长度的位数,python,integer,bits,typeconverter,Python,Integer,Bits,Typeconverter,我试图对像素列表进行增量压缩,并将其存储在二进制文件中。我已经设法做到了这一点,但是我发现这种方法每帧大约需要4分钟 def getByte_List(self): values = BitArray("") for I in range(len(self.delta_values)): temp = Bits(int= self.delta_values[I], length=self.num_bits_pixel) values.append(

我试图对像素列表进行增量压缩,并将其存储在二进制文件中。我已经设法做到了这一点,但是我发现这种方法每帧大约需要4分钟

def getByte_List(self):
    values = BitArray("")
    for I in range(len(self.delta_values)):
        temp = Bits(int= self.delta_values[I], length=self.num_bits_pixel)
        values.append(temp)
    ##start_time = time.time()
    bit_stream = pack("uint:16, uint:5, bits", self.intial_value, self.num_bits_pixel, values)
    ##end_time = time.time()
    ##print(end_time - start_time)

    # Make sure that the list of bits contains a multiple of 8 values
    if (len(bit_stream) % 8):
        bit_stream.append(Bits(uint=0, length = (8-(len(bit_stream) % 8))))                           #####Append? On a pack? (Only work on bitarray? bit_stream = BitArray("")

    # Create a list of unsigned integer values to represent each byte in the stream
    fmt = (len(bit_stream)/8) * ["uint:8"]
    return bit_stream.unpack(fmt)

这是我的密码。我获取初始值、每个像素的位数和增量值,并将它们转换为位。然后,我将字节对齐并获取字节的整数表示形式,然后在其他地方使用它。问题是我在哪里将每个增量值转换为位(3分钟),在哪里打包(1分钟)。有没有可能更快地完成我正在做的事情,或者以另一种方式将它们直接打包成表示字节的整数。

通过快速搜索您正在实例化的类,看起来您正在使用
位字符串模块。这是用纯Python编写的,所以速度相当慢也就不足为奇了。您可以查看以下一项或多项:

  • struct
    -Python附带的一个模块,它允许您将C结构打包并解压为组成值
  • bytearray
    -一种内置类型,允许您累积字节数组,并具有类似列表和字符串的操作
  • bin(x)
    int(x,2)
    -将数字转换为二进制表示形式的字符串,有时反字符串操作是一种相当有效的方法
  • 位数组
    -用于位操作的本机(C)模块,看起来它与
    位字符串
    具有类似的功能,但应该快得多。以适合在Linux上编译或预编译Windows的形式提供
  • numpy
    -快速操作各种类型的数组,包括单个字节。坦白地说,这类事情需要进入模块
对于这类操作,您肯定希望使用较低级别的语言,或优秀的语言。纯python并不真正适合这种情况