MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

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


  • Prev by Date: Re: Re: Re: Missing Graphics
  • Next by Date: Re: comparing two lists
  • Previous by thread: Re: comparing two lists
  • Next by thread: Re: comparing two lists