Re: fastest way to do pair-sum / make pair-list
- To: mathgroup at smc.vnet.net
- Subject: [mg23260] Re: [mg23170] fastest way to do pair-sum / make pair-list
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Sat, 29 Apr 2000 22:05:03 -0400 (EDT)
- References: <200004210348.XAA19772@smc.vnet.net> <FHsN4.409$UI4.20185@ralph.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Carl,
For pair creation, pairs2, below, seems to be about three times as fast as
the function, pairs, that you give.
It is taken from my recent posting on this thread, apart from the final
Transpose.
(1) Carl Woll
mask[n_] :=
Module[{r = Range[n - 1]},
Flatten[Range @@@ Transpose[{r(n + 1) - (n - 1), r n}]]]
pairs[n_List] := Module[{m, allpairs}, m = mask[Length[n]];
allpairs = Flatten[Outer[List, n, n], 1];
allpairs[[m]]]
pairs[{a, b, c, d}]
{{a, b}, {a, c}, {a, d}, {b, c}, {b, d}, {c, d}}
(2) Allan Hayes
pairs2[data_] := (*AH*)
Transpose[Apply[Join,
NestList[#, #[data], Length[data] - 2]] & /@ {Drop[#, -1] &,
Drop[#, 1] &}]
pairs2[{a, b, c, d}]
{{a, b}, {b, c}, {c, d}, {a, c}, {b, d}, {a, d}}
Timings: {length of data, pairs, pairs2}
data[n_] := Table[Random[], {n}];
Do[Print[{10 2^n, (pairs[#]; // Timing // First)/Second,
(pairs2[#]; // Timing // First)/Second}] &[data[10 2^n]], {n, 0,
6}]
{10, 0., 0.}
{20, 0.11, 0.}
{40, 0.22, 0.05}
{80, 0.22, 0.11}
{160, 0.72, 0.22}
{320, 3.02, 0.99}
{640, 12.96, 4.34}
--
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
"
- References:
- fastest way to do pair-sum / make pair-list
- From: Wijnand Schepens <Wijnand.Schepens@rug.ac.be>
- fastest way to do pair-sum / make pair-list