MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Efficient Histogram Algorithm?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg113142] Re: Efficient Histogram Algorithm?
  • From: Julian Francis <julian.w.francis at gmail.com>
  • Date: Fri, 15 Oct 2010 13:50:41 -0400 (EDT)
  • References: <i9276l$3fg$1@smc.vnet.net>

Have gone with jhistogram3:

jhistogram3[list_] :=
 Sort[Tally[Join[Range[0, 255], list]]][[All, 2]] - 1

In[96]:= Timing[hist3 = jhistogram3[randomList];][[1]]


Out[96]= 0.015

In[98]:= tallybased =
   With[{tallies = Tally[randomList]},
    Split[Sort[
       Join[tallies,
        Transpose[{Range[0, 255],
          ConstantArray[0,
           256]}]]], #[[1]] == #2[[1]] &][[All, -1, -1]]]; // Timing



Out[98]= {0.016, Null}

It is based on Bob's solution, but incorporates (insight from Darren)
a fix where if there were missing values in the random array, it
wouldn't have returned a value (of 0) for that.
The Range ensures that all values in the histogram will return, then I
subtract one from each of the histogram buckets to compensate for the
fact that I put an extra one in in the
first place.

They perform pretty similarly, I just find the first one easier for me
to understand.

Thanks all.
Julian.


  • Prev by Date: Re: local variables - Module, For loop
  • Next by Date: Re: something nice I found today, return multiple values from a function
  • Previous by thread: Re: Efficient Histogram Algorithm?
  • Next by thread: Travelling Salesman Problem with LinearProgramming