MATLAB Answers

secons max number in a vector

3 views (last 30 days)
PChoppala on 24 Nov 2011
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


Sign in to comment.

Accepted Answer

Rick Rosson
Rick Rosson on 24 Nov 2011
a = max(X);
Y = X(X ~= a);
b = max(Y);


Show 1 older comment
Jan on 25 Nov 2011
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 on 25 Nov 2011
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 on 25 Nov 2011
Everyone makes mistakes. Glass houses...

Sign in to comment.

More Answers (0)