Re: comparing two lists

*To*: mathgroup at smc.vnet.net*Subject*: [mg54330] Re: comparing two lists*From*: Peter Pein <petsie at arcor.de>*Date*: Thu, 17 Feb 2005 10:30:48 -0500 (EST)*References*: <cv086r$j2k$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Curt Fischer wrote: > Dear Group: > > I want to write a function that accepts a n-vector and an n x m matrix. > It should return a list of positions in the matrix where mat[[i,j]] > > vec[[i]]. For example, > > In[287]:= > vec=Table[Random[],{2}] > > Out[287]= > {0.482259,0.314393} > > In[288]:= > mat=Table[Table[Random[],{4}],{2}] > > Out[288]= > {{0.183706,0.758693,0.462242,0.170041},{0.457054,0.349658,0.805455,0.127763}} > > I would like myFunc[] to return {{2},{1,2,3}}. > > How could I write this as a pure function? Ideally I would like to be > able to Map or Apply my function to the list {mat, vec} and get my result. > > Something like > > Position[#1,_?(#>#2&)]&@@{mat,vec} > > is doomed to fail because the PatternTest required in Position[] messes > up the slotting of the other arguments. > > Ideas? How do you nest pure functions? > You can use Function: In[1]:= (vec = Table[Random[], {2}]) // ColumnForm (mat = Table[Random[], {2}, {4}]) // TableForm Out[1]= 0.360588 0.689747 Out[2]= 0.948523 0.688799 0.265442 0.953434 0.956405 0.416535 0.205109 0.272335 In[3]:= Function[{v, m}, (Cases[ Position[Inner[#1 > #2 &, Transpose[m], v, List], True], {#1, x_} -> x] &) /@ Range[Length[First[m]]] ] [vec, mat] Out[3]= {{1, 2}, {1}, {}, {1}} -- Peter Pein Berlin