bysungur.ka 0 27 ноября Опубликовано 27 ноября · Жалоба Есть следующий цикл в 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] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
looser 8 27 ноября Опубликовано 27 ноября · Жалоба crc_new(i)=mod(sum(crc(indices))+sum(D(i,:)),2) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 30 28 ноября Опубликовано 28 ноября · Жалоба 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 ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться