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