필터 지우기
필터 지우기

find max of a vector between two indice

조회 수: 17 (최근 30일)
Hajik zagori
Hajik zagori 2011년 9월 12일
댓글: Andrei Keino 2017년 8월 15일
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.

채택된 답변

Lucas García
Lucas García 2011년 9월 12일
>> C = arrayfun(@(x) max(B(A(x):A(x+1))),1:length(A)-1)
C =
2 9
  댓글 수: 1
Andrei Bobrov
Andrei Bobrov 2011년 9월 12일
Hi friends!
My part
C = cellfun(@max,mat2cell(B(A(1):A(end)),1,diff(A)+[1 0]))

댓글을 달려면 로그인하십시오.

추가 답변 (3개)

Sean de Wolski
Sean de Wolski 2011년 9월 12일
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
Sean de Wolski
Sean de Wolski 2011년 9월 12일
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 2011년 9월 12일
Yes!

댓글을 달려면 로그인하십시오.


Fangjun Jiang
Fangjun Jiang 2011년 9월 12일
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 2011년 9월 12일
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.

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by