MathGroup Archive 2011

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

Search the Archive

Re: replace with closest value

  • To: mathgroup at smc.vnet.net
  • Subject: [mg119535] Re: replace with closest value
  • From: Bill Rowe <readnews at sbcglobal.net>
  • Date: Wed, 8 Jun 2011 07:14:15 -0400 (EDT)

On 6/7/11 at 6:45 AM, graser at gmail.com (graser) wrote:

>Let's say there is a list like that AA={1.3, 1.5, 1.6, 1.8, 2.1,
>2.3, 2.6, 2.9, 3.3, 3.7, 4.2, 4.7, 5.2, 5.9, 6.6, 7.4, 8.3, 9.4,
>10.6, 11.8, 13.1, 14.8, 16.9, 19., 21.5, 23.6}. Length[AA]=26 I want
>to replace the element in the list with a closest number I specify
>in my list  BB, BB={1.2, 1.4, 1.6, 1.8, 2, 2.25, 2.5, 2.75, 3, 3.25,
>3.5, 3.75, 4, 5, 6, 8 , 10 , 15, 20, 25, 40, 60, 100}, Length[BB]=23
>so that the list AA after I replace will be

>AA={1.2, 1.5, 1.6, 1.8, 2. 2.25, 2.5,3.........20, 25}
>Length[AA]=26.

There is some ambiguity in what you should get given the values
you posted. You show the nearest value in bb to 1.3 to be 1.2.
Yet bb also contains 1.4 that is equally near. Assuming either
1.2 or 1.4 is equally acceptable, your problem could be solved as:

In[5]:= Flatten[aa /. x_?NumericQ :> Nearest[bb, x]]

Out[5]= {1.4,1.4,1.6,1.6,1.8,2,2.25,2.5,3,3.25,3.75,4,5,5,6,6,8,8,10,10,10,15,15,15,20,20,25}

But do note, while this could be a solution and the code is
short, this will not scale nicely to large lists. This code will
scan all elements of bb for each element of aa. That is,
execution speed will scale something like n^2.



  • Prev by Date: Re: Using Cases or Position to Find Strings in a List of Strings
  • Next by Date: Re: replace with closest value
  • Previous by thread: Re: replace with closest value
  • Next by thread: Re: replace with closest value