# find max of a vector between two indice

8 views (last 30 days)

Show older comments

Hajik zagori
on 12 Sep 2011

Commented: Andrei Keino
on 15 Aug 2017

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.

### Accepted Answer

Lucas García
on 12 Sep 2011

>> C = arrayfun(@(x) max(B(A(x):A(x+1))),1:length(A)-1)

C =

2 9

##### 1 Comment

Andrei Bobrov
on 12 Sep 2011

Hi friends!

My part

C = cellfun(@max,mat2cell(B(A(1):A(end)),1,diff(A)+[1 0]))

### More Answers (3)

Sean de Wolski
on 12 Sep 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 Comments

Sean de Wolski
on 12 Sep 2011

Fangjun Jiang
on 12 Sep 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

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!