FOR loop with IF condition alternative
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Agent Cooper
le 5 Août 2014
Réponse apportée : Agent Cooper
le 5 Août 2014
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)?
0 commentaires
Réponse acceptée
Hikaru
le 5 Août 2014
Try this
I = [1:1:10; 10:10:100]';
I(2,:) = 0;
I(8,:) = 0;
I(9,:) = 0;
2 commentaires
Hikaru
le 5 Août 2014
Sorry, I failed to notice it.
One way I can think of is something like this.
I = [1:1:10; 10:10:100]';
a = size(I);
limit = [2,3,9]; % specify the rows you want to be 0 here
for i=1:a(2)
I(limit(i),:) = 0;
end
I'm assuming you want the whole row be 0, but let me know if that's not the case.
Plus de réponses (2)
Amir
le 5 Août 2014
Modifié(e) : Amir
le 5 Août 2014
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
0 commentaires
Voir également
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!