RE: Help with Select[]

*To*: mathgroup at smc.vnet.net*Subject*: [mg34730] RE: [mg34631] Help with Select[]*From*: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.com>*Date*: Tue, 4 Jun 2002 03:41:39 -0400 (EDT)*Sender*: owner-wri-mathgroup at wolfram.com

> -----Original Message----- > From: Kevin Gross [mailto:kc144_nospam at ameritech.net] To: mathgroup at smc.vnet.net > Sent: Thursday, May 30, 2002 8:55 AM > Subject: [mg34730] [mg34631] Help with Select[] > > > Hello all, > > I've got data sets that resemble > > setA={ > {{x1,0},{x2,0}}, > {{x3,0},{x4,0}}, > {{x5,1},{x6,0}}, > {{x7,1},{x8,1}} > }; > > setB={ > {{x1,0},{x2,0},{x3,0}}, > {{x4,0},{x5,0},{x6,0}}, > {{x7,1},{x8,0},{x9,1}}, > {{x10,1},{x11,1},{x12,0}} > }; > > Each element of the set is a list of n (x,y) ordered pairs. > So n=2 for the > first set and n=3 for the second set. In general, n will > differ between the > data sets, but can be known. With each set, I want to select > those elements > whose sub-elements all have y=0. This is hard to explain in > English, but > easy to express in Mathematica: > > In: Select[setA,(#[[1,2]]==#[[2,2]]==0)&] > Out: {{{x1,0},{x2,0}},{{x3,0},{x4,0}}} > > In: Select[setB,(#[[1,2]]==#[[2,2]]==#[[3,2]]==0)&] > Out: {{{x1,0},{x2,0},{x3,0}},{{x4,0},{x5,0},{x6,0}}} > > First, I would like to know how to generate an arbitrary "selection > function" f[n] so that > > In: Select[setC,f[8]] > Out: {{{x1,0},...,{x8,0}},{{x9,0},...,{x16,0}},...} > > Is it possible to construct such an f? Or is there a better way of > accomplishing this task? It seems that perhaps pattern > matching might be of > use, but I haven't gotten too far with it. > > Thanks in advance, > > Kevin Gross > > Kevin, e.g. In[3]:= Select[setA, Plus @@ Abs[Transpose[#][[2]]] == 0 &] Out[3]= {{{x1, 0}, {x2, 0}}, {{x3, 0}, {x4, 0}}} In[4]:= Select[setB, Plus @@ Abs[Transpose[#][[2]]] == 0 &] Out[4]= {{{x1, 0}, {x2, 0}, {x3, 0}}, {{x4, 0}, {x5, 0}, {x6, 0}}} also In[6]:= Select[setB, With[{s = Transpose[#][[2]]}, s.s == 0] &] Out[6]= {{{x1, 0}, {x2, 0}, {x3, 0}}, {{x4, 0}, {x5, 0}, {x6, 0}}} (The second one has to be modified slightly if you may have complex values.) -- Hartmut