Re: Re: Tagged list processing

```Daniel Lichtblau 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