[英]Reversing bits of Python Numpy Array
假設我有一個 dtype uint16 的 numpy 數組,我如何有效地操作數組的每個元素以便反轉位?
例如。 0001111010011100 -> 0011100101111000
該網站上的現有解決方案似乎建議將數字打印到一個字符串中,這對於數組來說真的很慢。
我想要做的例子:
test = np.array([128, 64, 32, 16, 8, 4, 2, 1]).astype(np.uint16)
out = reverse_bits(test)
print(out)
>> array([ 256, 512, 1024, 2048, 4096, 8192, 16384, 32768], dtype=uint16)
arr = np.array(some_sequence)
reversed_arr = arr[::-1]
這將反轉數組的每個元素中的位。
def reverse_bits(x):
x = np.array(x)
n_bits = x.dtype.itemsize * 8
x_reversed = np.zeros_like(x)
for i in range(n_bits):
x_reversed = (x_reversed << 1) | x & 1
x >>= 1
return x_reversed
這是一個基於一些舊的 HAKMEM 技巧的。
def bitreverse16(x):
x = ((x & 0x00FF) << 8) | ((x & 0xFF00) >> 8)
x = ((x & 0x0F0F) << 4) | ((x & 0xF0F0) >> 4)
x = ((x & 0x3333) << 2) | ((x & 0xCCCC) >> 2)
x = ((x & 0x5555) << 1) | ((x & 0xAAAA) >> 1)
return x
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.