Re: Re: Counting list elements above/below a given value
- To: mathgroup at smc.vnet.net
- Subject: [mg17340] Re: [mg17271] Re: Counting list elements above/below a given value
- From: Carl Woll <carlw at u.washington.edu>
- Date: Fri, 30 Apr 1999 23:22:49 -0400
- Organization: Physics Department, U of Washington
- References: <7g0qv1$drj@smc.vnet.net> <199904300634.CAA21396@smc.vnet.net.>
- Sender: owner-wri-mathgroup at wolfram.com
Hi Allan, Your results were somewhat surprising to me, since I didn't expect the Select option to be the quickest. So, I played around with it, and I came up with an idea using Count that was faster. Witness In[17]:= data= Table[Random[],{280},{280}]; Count[data, _?(#>.5&),{2}]//Timing Count[data, x_/;x>.5,{2}]//Timing Length[Select[Flatten[data], #1>.5&]]//Timing Count[data-.5,_?Positive,{2}]//Timing Out[17]= {14.36 Second,39012} Out[18]= {12.84 Second,39012} Out[19]= {11.03 Second,39012} Out[20]= {8.71 Second,39012} So, changing the data and using a simpler test allows Count to beat Select. However, this isn't fair to Select. So doing the same thing for Select yields In[21]:= Length[Select[Flatten[data-.5], Positive]]//Timing Out[21]= {5.29 Second,39012} I guess the message here is that Length[Select[...]] is just faster than Count[...]. Carl Allan Hayes wrote: > Bill > > Count needs a pattern; and in this case a level specification. But pattern > matching is slower than the flattening and testing (with Select) that you > have used. Here are some timings. > > data= Table[Random[],{280},{280}]; > > Count[data, _?(#>.5&),{2}]//Timing > > {6.86 Second,39219} > > Count[data, x_/;x>.5,{2}]//Timing > > {6.26 Second,39219} > > Length[Select[Flatten[data], #1>.5&]]//Timing > > {5.82 Second,39219} > > Allan > > --------------------- > Allan Hayes > Mathematica Training and Consulting > Leicester UK > www.haystack.demon.co.uk > hay at haystack.demon.co.uk > Voice: +44 (0)116 271 4198 > Fax: +44 (0)870 164 0565 > > W.W. Sampson <w.sampson at umist.ac.uk> wrote in message > news:7g0qv1$drj at smc.vnet.net... > > I wish to count the number of elements within a list above > > a given value. I can do this using the following: > > > > Length[Select[Flatten[listname], value > #1&]] > > > > However, my list is a 280 x 280 matrix and consequently > > this takes a while to evaluate. My guess is that there > > must be something more efficient. I've tried: > > > > Count[listname, value > #1&] > > > > but the output given is 0, which I know to be incorrect. > > > > Any ideas appreciated. > > > > Bill > > -- Carl Woll Dept of Physics U of Washington