Re: Tagged list processing
- To: mathgroup at smc.vnet.net
- Subject: [mg86922] Re: [mg86891] Tagged list processing
- From: János <janos.lobb at yale.edu>
- Date: Wed, 26 Mar 2008 04:54:09 -0500 (EST)
- References: <200803250617.BAA10618@smc.vnet.net>
On Mar 25, 2008, at 2:17 AM, 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.
Here are some newbie approaches:
First I would create a combined list with Inner:
In[4]:=tagval = Inner[List, tag, val, List]
Then, you can get nztag for example with Condition:
> In[13]:=
> Flatten[Position[tagval,
> {a_, b_} /; a != 0]]
> Out[13]=
> {3, 6, 11, 12, 13}
With the best,
J=E1nos
--------------------------------------------------------
The more money has to be spent to fix a problem, the more likely it
is that the people with the money will agree to fix it.
/Alex Satrapa/
- References:
- Tagged list processing
- From: carlos@colorado.edu
- Tagged list processing