Counting number of numbers in a large list between two valus
- To: mathgroup at smc.vnet.net
- Subject: [mg114499] Counting number of numbers in a large list between two valus
- From: Lyle <lgordon at gmail.com>
- Date: Sun, 5 Dec 2010 21:57:05 -0500 (EST)
Dear Listers, I have a large (5-20million) one dimensional list of real numbers and I want to count the number of entries in the list that lie between 2 specific values (x1, x2). I need to run the function for a number of different ranges. ie. number of list entries (l), where x1 <= l <= x2 I've tried: tallydata[{x1_, x2_}] := Count[data, x_ /; x1 <= x <= x2] that takes about 3-4 seconds and tallydata[{x1_, x2_}] := Length[Select[data, x1 <= # <= x2 &]] which takes a little bit longer. The best I've managed is (this last one might be off by 1 or 2 but this doesn't really matter to me): sorteddata = Sort[data]; nf = Nearest[sorteddata]; tallyrange[{x1_, x2_}] := First[Position[sorteddata, First[nf[x2]]]] - First[Position[sorteddata, First[nf[x1]]]] which takes between 1 and 2 seconds but I was hoping there might be a faster way to do this? Any help would be great! Thanks, Lyle Gordon Northwestern University