MATLAB: Saving multiplications with zeros in a loop

loopssavingszeros

%if true
for i iterations
Matrix = Matrix.*phase %Matrix has lot of zeros I want to skip multiplications with zero. Is it possible to do it in a single line without using if else or any loops
%end
Please dont use sparse, both matrix and phase are two-dimensional array

Best Answer

Mask = Matrix ~= 0;
for i iterations
Matrix(mask) = Matrix(mask) * phase ;
end
This assumes that phase is a scalar nonzero value. It does not apply if phase is a vector or 2d array.
If phase is a 2d array then
phases = sparse(phase) ;
Matrix = sparse(Matrix) ;
for i iterations
Matrix = Matrix * phases;
end
Or better yet,
Matrix = sparse(Matrix) * (phase^iterations) ;
with no loop.