MathGroup Archive 1997

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Threading objects of unequal length

  • To: mathgroup at smc.vnet.net
  • Subject: [mg8243] Re: [mg8136] Re: [mg8112] Threading objects of unequal length
  • From: Allan Hayes <hay at haystack.demon.co.uk>
  • Date: Thu, 21 Aug 1997 21:16:59 -0400
  • Sender: owner-wri-mathgroup at wolfram.com

Further to my previous posting, here's another, faster, way - ten  
times as fast:
(I use the name MapThreadRagged because function is more like  
MapThread than Thread)

MapThreadRagged[h_,d_] :=
	Module[{x,ml,pd,tb,mth},
	   	ml = Max[Length /@ d];
       		pd = Table[x,{ml}];
       		tb = Take[Join[#,pd],ml]&/@d;
       		mth = MapThread[h, tb];
       		DeleteCases[mth, x, {2}]
	]

Correctness:

MapThreadRagged[h,{{a,b}, {c,d,e}, {f},{g}}]

	{h[a,c,f,g],h[b,d],h[e]}

MapThreadRagged[h,{{a,b}, {c,d,e}}]

	{h[a,c],h[b,d],h[e]}

Timings - comparison with Wouter's WollThread2 from previous posting 

WollThread2[head_,args__List]:=
Table[head@@Part[args,Flatten[Position[Length/@args,a_/;a>=i]],i],
{i, Max[Length/@args]}]

tst = Table[Range[Random[Integer,100]],{100}];

(mtr = MapThreadRagged[h,tst]);//Timing
	
	{0.5156 Second,Null}

(wt = WollThread2[h,tst]);//Timing

	{5.26479 Second,Null}

Check
mtr == wt
	
	True
Allan

Allan Hayes
hay at haystack.demon.co.uk
http://www.haystack.demon.co.uk/training.html
voice:+44 (0)116 2714198
fax: +44 (0)116 2718642
Leicester,  UK


  • Prev by Date: Mathematica Graphics
  • Next by Date: Re: AW: Saving graphics in Mma 3.0.1
  • Previous by thread: Re: Threading objects of unequal length
  • Next by thread: Re: Re: Threading objects of unequal length