Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2005
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2005

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

Search the Archive

Re: SameTest in Union

  • To: mathgroup at smc.vnet.net
  • Subject: [mg61117] Re: SameTest in Union
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Tue, 11 Oct 2005 03:20:09 -0400 (EDT)
  • Organization: The Open University, Milton Keynes, UK
  • References: <did38g$qht$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Jack Goldberg wrote:
> Hi Folks,
> 
> I know there is a simple answer to this question but the help index  
> idoes not help!
> 
> I have a list, something like this:
> 
> lst = {1.1101, 1.11095, 1.11076, 1.09, 2.3523, 2.352. 2.35211}
> 
> I want to remove from the list those entries which are near each  
> other but not identical, leaving only one representative for each of  
> these numbers.  One approach is to use  Union with the option   
> SameTest->???.   Here the same test might be that the difference  
> between entries is less than, say 10^(-2).   But I can't seem to get  
> SameTest to work.  So, what I want is
> 
> Union[ lst, SameTest- > ?]
> 
> so that  the union returns
> 
> {1.1101,  2.35211}
> 
> Here, I chose 2 representatives.  Any other choice is OK;   say,
> 
> {1.11095,  2.352}
> 
> is also satisfactory.
> 
> There may be other ways to do this, but I thought of  Union  first.   
> Perhaps, Cases  or Select  might be better.  Any help is appreciated.
> 
> Jack
> 
Hi Jack,

One way of doing this is to use a pure function for *SameTest* that 
compares absolute differences between each pair of values and returns 
*True* whenever differences are less than, say, 10^(-2). Also, note that 
I have corrected the syntax of your list for the last two numbers were 
not separated by a comma but were concatenated by a dot.

In[1]:=
lst = {1.1101, 1.11095, 1.11076, 1.09, 2.3523, 2.352, 2.35211}

Out[1]=
{1.1101, 1.11095, 1.11076, 1.09, 2.3523, 2.352, 2.35211}

In[2]:=
Union[lst, SameTest -> (Abs[#2 - #1] < 10^(-2) & )]

Out[2]=
{1.09, 1.1101, 2.352}

Best regards,
/J.M.


  • Prev by Date: Re: SameTest in Union
  • Next by Date: Re: Re: Reevaluation of conditional arguments when the condition has changed
  • Previous by thread: Re: SameTest in Union
  • Next by thread: Re: SameTest in Union