secons max number in a vector

Hi I need to find maximum and second maximum number in a vector. Can you please help?
For max, its max(X), but for second max I am unable to figure out.
Your help is appreciated
P

 채택된 답변

Rick Rosson
Rick Rosson 2011년 11월 24일

0 개 추천

a = max(X);
Y = X(X ~= a);
b = max(Y);

댓글 수: 4

bym
bym 2011년 11월 24일
wouldn't that be
Y = (X(X ~= a)); % ??
Jan
Jan 2011년 11월 25일
Yes, proecsm, now it is revealed that Rick thinks in C.
@Rick: This is a nice example for the limitations of Matlab. MAX(X) searchs the complete vector for the largest element. X~=a creates a LOGICAL vector of the same size as X and X(X~=a) processes the complete vector again. The temporary Y occupies almost as much memory as X. Finally the complete vector Y is searched.
If the input vector does not match in the processor cache, waiting for the slow RAM will be a brute bottleneck for this program. Usign SORT and taking the last two elements is not a good alternative for large inputs also, because it takes a lot of time and demands for storing another temporary array also.
A C-Mex function will be much faster - nearly as fast as a single MAX command: If the current element is larger than the old maximum, store the old maximum as 2nd max value and the current element as new maximum. This can even be multithreaded.
Walter Roberson
Walter Roberson 2011년 11월 25일
There are apparently efficient linear-time routines to find the N largest or N smallest numbers in a list, and supposedly they do not need to do a mini-sort of N elements to find the proper place in the list for each new value being tested. I have not yet been able to understand the logic in the paper that describes the internal comparison scheme.
Rick Rosson
Rick Rosson 2011년 11월 25일
Everyone makes mistakes. Glass houses...

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Entering Commands에 대해 자세히 알아보기

질문:

2011년 11월 24일

Community Treasure Hunt

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

Start Hunting!

Translated by