[英]Python Converts integer into a bit number of specific length, fast
我試圖delta壓縮像素列表並將它們存儲在二進制文件中。 我設法做到了這一點,但我找到的方法每幀需要約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)
這是我的代碼。 我取初始值,每像素的位數和增量值,並將它們轉換為位。 然后我進行字節對齊並獲取字節的整數表示並在其他地方使用它。 問題區域是我將每個delta值轉換為位(3min)和I pack(1min)的位置。 是否可以更快地執行我正在做的事情或以其他方式直接將它們打包成表示字節的整數。
從您正在實例化的類的快速Google中,看起來您正在使用bitstring
模塊。 這是用純Python編寫的,因此它的速度非常慢並不令人驚訝。 您可能會看到以下一項或多項:
struct
- Python附帶的一個模塊,它允許您將C結構打包並解壓縮為組成值 bytearray
- 一種內置類型,允許您累積一個字節數組,並具有類似列表和字符串的操作 bin(x)
, int(x, 2)
- 將數字轉換為二進制表示形式作為字符串,而返回字符串操作有時可能是一種合理有效的方法 bitarray
- 用於位操作的本機(C)模塊,看起來它具有與bitstring
類似的功能,但應該更快。 這里提供的格式適合在Linux上進行編譯或在此預編譯為Windows。 numpy
- 快速操作各種類型的數組,包括單個字節。 坦率地說,這類事情的首選模塊。 http://www.numpy.org/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.