필터 지우기
필터 지우기

addition loops in matlab

조회 수: 5 (최근 30일)
ali hassan
ali hassan 2022년 2월 12일
편집: DGM 2022년 2월 12일
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
ali hassan
ali hassan 2022년 2월 12일
thanks a lot. i had the same in my mind. but i cant figure out for loop less answer.
Austin Decker
Austin Decker 2022년 2월 12일
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));

댓글을 달려면 로그인하십시오.

채택된 답변

DGM
DGM 2022년 2월 12일
편집: DGM 2022년 2월 12일
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
ali
  댓글 수: 4
ali hassan
ali hassan 2022년 2월 12일
편집: ali hassan 2022년 2월 12일
thanks a lot @DGM. adding a bit twist here.
a = [1 nan 1 1 0 0 nan 1 1 nan 1];
suppose it contains nan as well. how can i do the same and ignore nan?
if i use movsum, nan will be removed but the entry will still be considered. how can i also make it to ignore nan entry as well?
DGM
DGM 2022년 2월 12일
편집: DGM 2022년 2월 12일
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)
ans = logical
1
% using conv
a(isnan(a)) = 0;
s = conv(a,[1 1 1],'valid');
any(s==3)
ans = logical
1
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
s = 1×9
NaN NaN 2 1 NaN NaN NaN NaN NaN
any(s==3) % NaNs aren't equal to 3
ans = logical
0

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by