| Re: Mode???? [message #14075 is a reply to message #13993] |
Thu, 14 January 1999 00:00   |
S Penzes
Messages: 4 Registered: February 1998
|
Junior Member |
|
|
RobertKehoe wrote:
> Hi there
> I am trying to find an IDL function that returns the mode out of an array
> of numbers anyone know a way of doing this. It strange that there does not
> seem to be a function for this.
> Rob.
> --
> The opinions expressed in this communication are my own and do not
> necessarily reflect those of my employer.
Hi,
If by "mode" you mean the number that occurs most frequently in a vector
then take a look at this piece of code. It comes from the very first "Widget
Programming" course (heck my manuals are all stamped DRAFT). It was put
forward as an example of a piece of code that would forego the use of loops.
To me it was a classic example and I periodically revive it to show what can be
done.
Hope this is what you were looking for.
Function Mode, Value
NumElements = N_ELEMENTS( Value )
SortedValue = [ Value( SORT( Value )),0]
SortedValue(NumElements)= NOT( SortedValue( NumElements-1 ))
ShiftedValue = SHIFT( SortedValue,1 )
RunLengths = WHERE( SortedValue NE ShiftedValue )
RunsShifted = SHIFT( RunLengths,1 )
MaxRun = MAX( Runlengths - RunsShifted, Index )
Mode = SortedValue( RunsShifted( Index ))
Return, Mode
End
IDL> input=[3,3,4,4,4,2,2,5,5,5,5]
IDL> print,mode(input)
5
--
Steven Penzes (Steven.nospamPenzes@dres.dnd.ca)
Note: remove "nospam" from Reply-To and .signature
|
|
|
|