FOR loop with IF condition alternative
Mostra commenti meno recenti
I have the following code
I = [1:1:10; 10:10:100]'
a = size(I)
limit1 = 1
limit2 = 3
limit3 = 7
limit4 = 10
for j = 1:a(2)
X = I(:,j)
for k = 1:a(1)
if (k>limit1 && k<limit2) || (k>limit3 && k<limit4)
Y = 0
else Y = X(k)
end
B(k) = Y
end
C{j} = B'
end
that replaces the 2nd, the 8th and the 9th elements on each column with 0. For the example above, the [1 2 3 4 5 6 7 8 9 10; 10 20 30 40 50 60 70 80 90 100] matrix is replaced with the [1 0 3 4 5 6 7 0 0 10; 10 0 30 40 50 60 70 0 0 100] matrix.
Could anyone give me a hint on how to do this without using the FOR loop and the IF condition (because they are very slow when processing big amounts of data)?
Risposta accettata
Più risposte (2)
Please try this code. You will only need to specify your limits (L matrix)
I = [1:1:10; 10:10:100]';
L = [1 3 7 10]; % limit Matrix
NewL=vec2mat(L,2);
R=[]; %Removed rows
for i=1:size(NewL,1)
R=[R NewL(i,1)+1:NewL(i,2)-1];
end
I(R,:)=0; % or I(R,:)=[] if you want to remove those rows
Agent Cooper
il 5 Ago 2014
0 voti
Categorie
Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!