Using find in a loop
Mostra commenti meno recenti
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.
Risposte (2)
Azzi Abdelmalek
il 28 Lug 2013
Modificato: Azzi Abdelmalek
il 28 Lug 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 Commenti
Silke
il 29 Lug 2013
Azzi Abdelmalek
il 29 Lug 2013
Modificato: Azzi Abdelmalek
il 29 Lug 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
il 29 Lug 2013
Andrei Bobrov
il 28 Lug 2013
Modificato: Andrei Bobrov
il 29 Lug 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;
Categorie
Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!