Re: Re: Tagged list processing
- To: mathgroup at smc.vnet.net
- Subject: [mg86948] Re: [mg86914] Re: [mg86891] Tagged list processing
- From: Daniel Lichtblau <danl at wolfram.com>
- Date: Thu, 27 Mar 2008 08:16:32 -0500 (EST)
- References: <200803250617.BAA10618@smc.vnet.net> <200803260952.EAA09459@smc.vnet.net>
Daniel Lichtblau wrote: > carlos at colorado.edu wrote: > >>This is related to a recent question. Best stated through an example. >>I have two flat lists of equal length: >> >>tag={0,0,1,0,0, -3,0,0,0,0, 2,4,1,0,0}; >>val={0,0,4,5,6, P,1/2,0,-3.0,a+4, 8,16.4,0,Sin[ang],Cos[ang]}; >> >>tag contains only integers whereas val can have numbers or >>expressions that will (eventually) evaluate to a number. >> >>Task. Generate a pointer list to all nz values in tag, and a >>corresponding list of values: >> >>nztag={3,6,11,12,13}; (* may be empty *) >>nzval={4,P,8,16.4,0}; (* may be empty *) >> >>and also build the complementary lists >> >>ztag={1,2,4,5,7,8,9,10,14,15}; >>zval={0,0,5,6,1/2,0,-3.0,a+4, Sin[ang],Cos[ang]}; >> >>Obviously ztag=Position[tag,0]; but which >>form argument do I use for nztag in Position[tag,form]? >>Can I build zval and nzval with Table for speed ? >>(lists may contain 10^4 to 10^6 items) >> >>Constraint: must work in 4.0 thru 6.0 since some of my >>remote students have legacy academic versions. Thanks. > [...] This will work in version 4, and is significantly faster than what I posted before. tagsAndValues2[tag_List,val_List] := Module[ {ztag,nztag}, {nztag,ztag} = Transpose[Table[If[tag[[j]]==0, {Sequence[],j}, {j,Sequence[]}], {j,Length[tag]}]] {nztag,val[[nztag]],ztag,val[[ztag]]} ] Daniel Lichtblau Wolfram Research
- References:
- Tagged list processing
- From: carlos@colorado.edu
- Re: Tagged list processing
- From: Daniel Lichtblau <danl@wolfram.com>
- Tagged list processing