Using find in a loop
Show older comments
Hello,
I have a problem with the code below. I am trying to get the maximum values of the vector I and its indices. I find the maximum values without problems and store them in Maxi. Finding the indices does not work. The code below gives a 1+15 double filled with [3,2,1,3,3,3,2,1,1,1,3,3,3,2,1] instead of [3, 3, 3, 4,7, 8,8, 8, 9, 10, 13, 14, 15, 15, 15]. Could anyone please let me know what I am doing wrong?
I = [1, 2, 4, 3,3,3,5, 10,8,7, 2,4, 5, 6, 8,6,5 ];
for ii = 1:15
Maxi(ii) = max(I(ii:(ii+2)));
I_Maxi(ii) = find(I(ii:(ii+2)) == max(I(ii:(ii+2))));
end
I want only to find the first index within the window ii:ii+2 of the maximum value of I and store it. Is this somehow possible?
Thank you for your help.
Answers (2)
Azzi Abdelmalek
on 28 Jul 2013
Edited: Azzi Abdelmalek
on 28 Jul 2013
Use find(expression,1)
I = [1, 2, 4, 3,3,3,5, 10,8,7, 2,4, 5, 6, 8,6,5 ];
for ii = 1:15
Maxi(ii) = max(I(ii:(ii+2)));
I_Maxi(ii) = find(I(ii:(ii+2)) == max(I(ii:(ii+2))),1);
end
3 Comments
Silke
on 29 Jul 2013
Azzi Abdelmalek
on 29 Jul 2013
Edited: Azzi Abdelmalek
on 29 Jul 2013
I = [1, 2, 4, 3,3,3,5, 10,8,7, 2,4, 5, 6, 8,6,5 ];
for ii = 1:15
[b,c] = max(I(ii:(ii+2)));
maxi(ii)=b;
idxi(ii)=c+ii-1
end
%or
I = [1, 2, 4, 3,3,3,5, 10,8,7, 2,4, 5, 6, 8,6,5 ];
n=numel(I)-2
for ii = 1:n
[maxi(ii),idxi(ii)] = max(I(ii:(ii+2)));
end
idxi=idxi+(0:n-1)
Silke
on 29 Jul 2013
Andrei Bobrov
on 28 Jul 2013
Edited: Andrei Bobrov
on 29 Jul 2013
I = [1, 2, 4, 3,3,3,5, 10,8,7, 2,4, 5, 6, 8,6,5 ];
for ii = 15:-1:1
[Maxi(ii,1),jj]= max(I(ii:(ii+2)));
I_Maxi(ii,1) = jj + ii -1;
end
OR
ii = (0:numel(I)-3)';
[Maxi,jj] = max(I(bsxfun(@plus,1:3,ii)),[],2);
I_Maxi = jj + ii;
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!