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