0
0 комментариев

Дано:

Битовая маска длины N, например

N = 8
mask = [0, 1, 0, 1, 0, 1, 1, 1]

Сумма элементов в маске равна некоторому заданному K, в моем примере К = 5.

Дано двоичное сообщение длины К: d = [1, 0, 1, 0, 0]

Нужно из d получить вектор u используя маску. Вместо единиц в маске вставляются биты из d. В моем примере u = [0, 1, 0, 0, 0, 1, 0, 0]

На python 3 получилась вот такая функция:

def precode(info, mask):
    precoded = mask[:]
    j = 0
    for i in range(len(mask)):
        if precoded[i] == 1:
            precoded[i] = info[j]
            j += 1
    return precoded

В MATLAB та же операция выглядит следующим образом:

u = zeros(N, 1);
u(mask == 1) = d; %непосредственно вставка бит

Насколько я знаю, выполняется такая операция быстрее, чем перебор поэлементно в цикле. Есть ли что-то подобное матлабовской операции в python (например, в numpy)?


Добавить комментарий