bysungur.ka 0 November 27 Posted November 27 · Report post Есть следующий цикл в 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] Quote Share this post Link to post Share on other sites More sharing options...
looser 8 November 27 Posted November 27 · Report post crc_new(i)=mod(sum(crc(indices))+sum(D(i,:)),2) Quote Share this post Link to post Share on other sites More sharing options...
_4afc_ 30 November 28 Posted November 28 · Report post 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 ); Quote Share this post Link to post Share on other sites More sharing options...