Реверсивные биты Python Numpy Array - PullRequest
0 голосов
/ 04 февраля 2020

Предположим, у меня есть массив numpy dtype uint16, как мне эффективно манипулировать каждым элементом массива, чтобы биты были обращены?

например. 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)

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Будет инвертировать биты в каждом элементе массива.

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
1 голос
/ 04 февраля 2020
arr = np.array(some_sequence)
reversed_arr = arr[::-1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...