Cases or Select?
- To: mathgroup at smc.vnet.net
- Subject: [mg131492] Cases or Select?
- From: W Craig Carter <ccarter at MIT.EDU>
- Date: Thu, 8 Aug 2013 00:07:02 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-outx@smc.vnet.net
- Delivered-to: mathgroup-newsendx@smc.vnet.net
- References: <ktaj20$llc$1@smc.vnet.net> <ktcnaf$r2b$1@smc.vnet.net> <20130802065025.0EF4969D7@smc.vnet.net>
Hello Danny, I have the same subjective opinion, Select seems more natural than Cases in this case. I can never remember which of the two goes with patterns and which with functions in any case--I think I've looked up the syntax on these functions more than any others. So, I decided to run a little test: s = List @@ Expand[5 (x + y)^100000]; ts = First@ Timing[Do[ Select[s, Exponent[#, x] >= 1 && Exponent[#, y] <= 1 &], {100}]] (*roughly 75*) tc = First@ Timing[Do[ Cases[s, aa_ /; Exponent[aa, x] >= a && Exponent[aa, y] <= a], {100}]] (* roughly 73*) tc/ts (*roughly 1.03*) I had guessed that the function call would have been faster... but I guessed wrong. I don't believe there is any caching of results here, so it seems a fair comparison. I suppose that if the function in Select had only numeric arguments, then using Compile might make Select a better choice. Craig On Aug 2, 13, at 2:50 AM, danl at wolfram.com wrote: > In[20]:= a = 1; > > In[21]:= Select[s, Exponent[#, x] >= a && Exponent[#, y] <= a &] > > Out[21]= {5 x^3, 15 x^2 y} > > Obviously this can also be done with Cases, but that seems a bit more awkward to me. > > In[22]:= Cases[s, aa_ /; Exponent[aa, x] >= a && Exponent[aa, y] <= a] > > Out[22]= {5 x^3, 15 x^2 y} > > Since "natural" and "awkward" are in the mind of the beholder, one might well hold an opinion the reverse of my own.
- References:
- Re: Pattern with powers
- From: danl@wolfram.com
- Re: Pattern with powers