MathGroup Archive 2007

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

Search the Archive

Re: Finding position of an element in a list:

  • To: mathgroup at smc.vnet.net
  • Subject: [mg84042] Re: Finding position of an element in a list:
  • From: "Kevin J. McCann" <Kevin.McCann at umbc.edu>
  • Date: Fri, 7 Dec 2007 03:11:10 -0500 (EST)
  • Organization: University System of Maryland
  • References: <fj8pfv$j3j$1@smc.vnet.net>

Nice one, Bob. Yet another new function (Nearest) that I didn't know about.

  I found the output of your function to be a bit cumbersome. Also, if 
there are repeated nearest values, then you get the positions twice. I 
modified your function by adding a Union and a final Flatten to produce 
a single list:

nearestPosition2[lst_List,val_?NumericQ]:=
Flatten[Union[Flatten[Position[lst,#]]&/@Nearest[lst,val]]];


So that the output of

xlis = {0, 1, 5.5, 10, 4, 5, 5.5, 10.25};

is {3,7} instead of {{{3},{7}},{{3},{7}}}.

Cheers,

Kevin


Bob Hanlon wrote:
> nearestPosition[xlis_List, val_?NumericQ] :=
>   Flatten[Position[xlis, #]] & /@
>    Nearest[xlis, val];
> 
> xlis = {0, 1, 3, 10, 4, 5, 5.5, 10.25};
> 
> nearestPosition[xlis, 6]
> 
> {{7}}
> 
> xlis = {0, 1, 6.5, 10, 4, 5, 5.5, 10.25};
> 
> nearestPosition[xlis, 6]
> 
> {{3}, {7}}
> 
> 
> Bob Hanlon
> 
> ---- Gopinath Venkatesan <gopinathv at ou.edu> wrote: 
>> Hello Friends,
>>
>> (This is an easy problem, but I was unable to get it work in Mathematica, probably because of the precision - I tried setting precision too, still got stuck)
>>
>> Suppose we have a list, xlis, having some elements, and I have to find one nearest value I am interested in that list. In the below example, I wanted to find the position of a number belonging to list and close to 6 (which is 5.5 located at 7th).
>>
>> I can do this:
>>
>> xlis = {0, 1, 3, 10, 4, 5, 5.5, 10.25};
>> dropOuterBraces[lst_List] := 
>>  StringTake[#1, {2, StringLength[#1] - 1}] &[
>>   ToString[lst]]; (* took from previous help posted by Peter Pein *)
>> n1 = Nearest[xlis, 6]
>> eval = dropOuterBraces[n1]
>> Position[xlis, eval]
>> Position[xlis, 5]
>>
>> As you see, the last but one command returns nothing, and we have to explicitly say the number to return the position.
>>
>> Or should some other command be used to extract the position of an arbitrary number in a list?
>>
>> Same with the case of MemberQ command, it gives True for some and False for some. For example, consider this list,
>>
>> xlis = Table[N[((1 - Cos[(j - 1)/9 \[Pi]])/2) 1.32], {j, 1, 10}];
>> dropOuterBraces[lst_List] := 
>>  StringTake[#1, {2, StringLength[#1] - 1}] &[ToString[lst]]
>>
>> eval = Nearest[xlis, 0.32];
>> xlis
>> elem = dropOuterBraces[eval]
>> MemberQ[xlis, 0.545392]
>> MemberQ[xlis, 0.33]
>> Position[xlis, 0.33]
>> Position[xlis, elem]
>>
>> Please hint where I am wrong.
>>
>> Thanks,
>>
>> Gopinath Venkatesan
>> Graduate Student
>> University of Oklahoma
>>
> 
> 

-- 

Kevin J. McCann
Research Associate Professor
JCET/Physics
Physics Building
University of Maryland, Baltimore County
1000 Hilltop Circle
Baltimore, MD 21250


  • Prev by Date: Re: Eigensystem consistency
  • Next by Date: Re: Re: Mathematica: Long divison for polynomials
  • Previous by thread: Re: Finding position of an element in a list:
  • Next by thread: Re: Finding position of an element in a list: