MathGroup Archive 2008

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

Search the Archive

Re: Re: Tagged list processing


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



  • Prev by Date: Re: Equi-sized tick labels
  • Next by Date: Re: Limit[(x - Log[Cosh[x]]) SinIntegral[x], x ->
  • Previous by thread: Re: Tagged list processing
  • Next by thread: Re: Tagged list processing