Итерация по измерению K
приводит к более эффективному коду только с одним циклом.См. более короткий алгоритм раздел кода ниже:
% Some data
clear; M = 3; N = 2; K = 4;
matrixbig = rand(M,N,K);
binmask = round(matrixbig(:,:,1));
% Original algorithm
mat_zeros = []; mat_ones = [];
for m=1:M
for n=1:N
matval = matrixbig(m,n,:);
matval = matval(:)';
if (binmask(m,n) == 1)
mat_ones = [mat_ones; matval];
elseif (binmask(m,n) == 0)
mat_zeros = [mat_zeros; matval];
end
end
end
% Shorter algorithm
mat_zeros1 = []; mat_ones1 = [];
mask = (binmask == 1)';
for k = 1:K
matval = matrixbig(:,:,k)';
mat_ones1 = [mat_ones1, matval(mask)];
mat_zeros1 = [mat_zeros1, matval(~mask)];
end
% Compare results of two algorithms
isequal(mat_ones, mat_ones1 )
isequal(mat_zeros, mat_zeros1 )