Перейти к содержанию
    

Векторизация MatLab

Есть следующий цикл в MatLab:

crc = zeros(1, 8);

crc_new = zeros(1, 8);

for i = 1:8
                
    indices = nonzeros(index_matrix(i, :))';

    xor_sum = 0;

    for idx = 1:length(indices)
        bit_ind = indices(idx);
        xor_sum = xor(xor_sum, crc(bit_ind));
    end

    for j = 1: length(D(i, :))
        xor_sum = xor(xor_sum, D(i, j));
    end

    crc_new(i) = xor_sum;

end

Нужно с помощью векторизации matlab по возможности упростить следующие циклы:

for idx = 1:length(indices)
     bit_ind = indices(idx);
     xor_sum = xor(xor_sum, crc(bit_ind));

end

 

for j = 1: length(D(i, :))
     xor_sum = xor(xor_sum, D(i, j));

end

В результате xor_sum содержит один итоговый бит; Длины векторов indices и (D(i, :)) не совпадают;

Пример вектора indices: [1,4,5,7]

Пример матрицы D : [0;0;1;1;0;0;0;1]

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 hours ago, looser said:

crc_new(i)=mod(sum(crc(indices))+sum(D(i,:)),2)

Тогда, возможно, это можно переписать даже во что-то типа:

crc_new= arrayfun( @(i) mod(sum(crc(indices))+sum(D(i,:)),2) , 1:8 );

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...