find max of a vector between two indice
11 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
I would write a new specific function that accepts A,B and spits out an answer. Then call it from where we need prettiness.
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
Find more on Variables 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!