Re: Tagged list processing

• To: mathgroup at smc.vnet.net
• Subject: [mg86935] Re: [mg86891] Tagged list processing
• From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
• Date: Wed, 26 Mar 2008 04:56:37 -0500 (EST)
• References: <200803250617.BAA10618@smc.vnet.net>

```On 25 Mar 2008, at 07:17, 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 should work in all versions of Mathematica:

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]};

nztag = Position[tag, z_ /; z != 0]
{{3}, {6}, {11}, {12}, {13}}

nzval = Extract[val, nztag]
{4, P, 8, 16.4, 0}

etc.

Andrzej Kozlowski

>
>

```

• Prev by Date: Re: Mathlink: How do I pass arbitrary data from Mathematica to C?
• Next by Date: Re: Tally
• Previous by thread: Tagged list processing
• Next by thread: Re: Tagged list processing