comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » How to find second minimum elements in an array in IDL?
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: How to find second minimum elements in an array in IDL? [message #64724 is a reply to message #64677] Thu, 15 January 2009 14:39 Go to previous messageGo to previous message
Michael Galloy is currently offline  Michael Galloy
Messages: 1114
Registered: April 2006
Senior Member
On Jan 15, 10:36 am, cmanc...@gmail.com wrote:
> I was curious, so I checked out your routine Mike.  It looks good but
> one problem - a for loop!  I'm pretty sure you can replace:
>
>     nCandidates = 0L
>     for bin = 0L, nBins - 1L do begin
>         nCandidates += h[bin]
>         if (nCandidates ge n) then break
>     endfor
>
> with:
>
>     max( total( h, /cumulative ) < n, bin )
>
> which should work because max will return the first maximum value.  Of
> course, I was too lazy to see if the max(total()) method is actually
> faster (since it involves a couple different compuatations), but oh
> well, sometimes laziness wins :)

It turns out that it probably doesn't matter much.

It's not FOR loops per se that are bad, but the execution of many
statements. For perfectly uniformly distributed data, the FOR loop
above will only loop once -- more times the less uniformly distributed
the data, bounded by the number of bins (i.e. number of data
elements / number of elements required).

Averages were computed for 500 runs of finding the smallest k=100
elements of an n=1000000 element dataset.

For uniform data:

mg_n_smallest(randomu(seed, n), k)

vectorized: 0.035663 seconds
loops: 0.036040 seconds
loops are 1.1% faster

For perverse data:

mg_n_smallest([randomu(seed, k - 1), randomu(seed, n - k + 1) + n /
k], 100)

vectorized: 0.279783 seconds
loops: 0.281627 seconds
vectorized is 0.7% faster

Mike
--
www.michaelgalloy.com
Tech-X Corporation
Associate Research Scientist
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Re: Two Million Visitors!
Next Topic: Question relating to IDL wavelet methods

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Fri Oct 10 04:51:09 PDT 2025

Total time taken to generate the page: 0.48201 seconds