addition loops in matlab
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
assume i have a vector array:
a=[1 1 1 0 0 1 1 1]
how can i put loop such that if sum of any three successive elements is equal to 3, it prints 'ali'.
can it be done without loops?
3 commentaires
Austin Decker
le 12 Fév 2022
Well, MATLAB is likely looping behind the scenes, but you could do this:
a = [1,1,1,0,0 1,1,1];
ind1 = 1:length(a) -2;
ind2 = ind1 + 2;
result = arrayfun(@(x,y) sum(a(x:y)),ind1,ind2);
qty = sum(result == 3);
disp(join(repmat("ali",qty,1),newline));
Réponse acceptée
DGM
le 12 Fév 2022
Modifié(e) : DGM
le 12 Fév 2022
This works easily enough. After R2016a, you can do the same with movsum().
a = [1 1 1 0 0 1 1 1];
if any(conv(a,[1 1 1],'valid')==3)
fprintf('ali\n')
end
4 commentaires
DGM
le 12 Fév 2022
Modifié(e) : DGM
le 12 Fév 2022
To omit nans:
a = [2 nan 1 1 0 0 nan 1 1 nan 1];
% using movsum
s = movsum(a,3,'omitnan');
any(s(2:end-1)==3)
% using conv
a(isnan(a)) = 0;
s = conv(a,[1 1 1],'valid');
any(s==3)
If the value range of a never extends beyond [0 1], then you could also simply treat any propagated NaNs as 0. This is simply because it wouldn't be possible to have a sum equal to 3 if the window size were also 3 and any element were anything other than 1.
a = [1 nan 1 1 0 0 nan 1 1 nan 1];
s = conv(a,[1 1 1],'valid') % this will pass NaN
any(s==3) % NaNs aren't equal to 3
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!