Value and position in list
- To: mathgroup at smc.vnet.net
- Subject: [mg33403] Value and position in list
- From: Hugh Goyder <goyder at rmcs.cranfield.ac.uk>
- Date: Wed, 20 Mar 2002 01:53:08 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
I have a list where each element is a list of three values {{v11,v12,v13},{v21,v22,v23}...}. What is the fastest method for finding the position and value of the element which has the smallest first element. I have the following but is it possible to do this more quickly, perhaps without two sorts through the data? In[1]:= $Version Out[1]= 4.1 for Microsoft Windows (June 13, 2001) In[2]:= data=Table[{Random[],Random[]-0.5,10(Random[]-0.5)},{10000}]; In[3]:= Timing[a=Min[Transpose[data][[1]]];p=Position[data,a];{a,p}] Out[3]= {0.33 Second,{0.0000316723,{{1706,1}}}} I must also find the element which has the smallest second element greater than zero. Here are my attempts so far. Is there a faster method? In[4]:= Timing[a=Infinity;i=0; While[i++;i<Length[data],If[0<data[[i,2]]<a,a=data[[i,2]];p=i]];{a,p}] Out[4]= {1.31 Second,{0.0000126855,1134}} In[5]:= Timing[a=Min[Transpose[data][[2]]/.v_/;v\[LessEqual] 0 \[Rule] Infinity]; p=Position[data,a];{a,p}] Out[5]= {0.71 Second,{0.0000126855,{{1134,2}}}} In[6]:= Timing[a=Min[Select[Transpose[data][[2]],#>0&]];p=Position[data,a];{a,p}] Out[6]= {0.61 Second,{0.0000126855,{{1134,2}}}} Thank you for your ideas Hugh Goyder