find max of a vector between two indice

Hi, I want a code to find the maximum number between two indice of a vector.
I have an indice vector and a data vector . For example my indice vector is :
A=[3 7 13]
and my data vector is:
B=[-5 3 -8 1 -7 2 -9 3 6 2 7 9 -4 2 6]
now the max number between indices 3 and 7 of vector B is number "2" .
and the max number between indices 7 and 13 of vector B is number "9".
So the output should be like a vector named C as follows:
C=[2 9]
I've been thinking on this for hours but haven't found any solution yet :(
Tnx in advance.

 Respuesta aceptada

Lucas García
Lucas García el 12 de Sept. de 2011
>> C = arrayfun(@(x) max(B(A(x):A(x+1))),1:length(A)-1)
C =
2 9

1 comentario

Andrei Bobrov
Andrei Bobrov el 12 de Sept. de 2011
Hi friends!
My part
C = cellfun(@max,mat2cell(B(A(1):A(end)),1,diff(A)+[1 0]))

Iniciar sesión para comentar.

Más respuestas (3)

Sean de Wolski
Sean de Wolski el 12 de Sept. de 2011
Easiest, and likely fastest way is just to use a for-loop:
A=[3 7 13];
B=[-5 3 -8 1 -7 2 -9 3 6 2 7 9 -4 2 6];
nmax = length(A)-1;
maxes = zeros(1,nmax);
for ii = 1:nmax
maxes(ii) = max(B(A(ii):A(ii+1)));
end
TIMINGS Mac 2009b
A=[3 7 13];
B=[-5 3 -8 1 -7 2 -9 3 6 2 7 9 -4 2 6];
t1 = 0;
t2 = 0;
for ii = 1:100
tic
nmax = length(A)-1;
maxes = zeros(1,nmax);
for ii = 1:nmax
maxes(ii) = max(B(A(ii):A(ii+1)));
end
t1 = t1+toc;
tic
C = arrayfun(@(x) max(B(A(x):A(x+1))),1:length(A)-1);
t2 = t2+toc;
end
t2/t1
ans = 25.029
arrayfun takes about 25x longer on my system

3 comentarios

Lucas García
Lucas García el 12 de Sept. de 2011
I totally agree with you, Sean. arrayfun is more time consuming, but takes less syntax.. Depending on my needs for speed I would choone one or the other.
Sean de Wolski
Sean de Wolski el 12 de Sept. de 2011
I would write a new specific function that accepts A,B and spits out an answer. Then call it from where we need prettiness.
Lucas García
Lucas García el 12 de Sept. de 2011
Yes!

Iniciar sesión para comentar.

Fangjun Jiang
Fangjun Jiang el 12 de Sept. de 2011
A=[3 7 13];
B=[-5 3 -8 1 -7 2 -9 3 6 2 7 9 -4 2 6];
C=zeros(1,numel(A)-1)
for k=1:numel(A)-1
C(k)=max(B(A(k):A(k+1)));
end
Hajik zagori
Hajik zagori el 12 de Sept. de 2011

0 votos

Thank you very much Lucas , Fangjun and Sean.I checked them all and all three solutions worked perfectly.
I don't know which answer I'd better accept because all of them were good.
Anyway I guess I choose the first one.
Best Regards .
Hajik.

Categorías

Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.

Preguntada:

el 12 de Sept. de 2011

Comentada:

el 15 de Ag. de 2017

Community Treasure Hunt

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

Start Hunting!

Translated by