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.