Re: reliably sort?
- To: mathgroup at smc.vnet.net
- Subject: [mg123741] Re: reliably sort?
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Sat, 17 Dec 2011 02:43:04 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jca06e$a35$1@smc.vnet.net> <201112150955.EAA22951@smc.vnet.net>
- Reply-to: drmajorbob at yahoo.com
Union COULD be a set operation... if sets existed in Mathematica. The
output may LOOK like a set to you, but that's a mirage.
> But there are other implementations which can be used for this set
> operation which do not use sorting
Ah, but you DID sort b (in order to make the results equal), whereas Union
sorted the list before eliminating duplicates.
Yes, other implementations exist that don't involve sorting... but they're
not built-in to Mathematica, and you haven't demonstrated one.
Bobby
On Fri, 16 Dec 2011 04:54:15 -0600, Ulrich Arndt
<ulrich.arndt at data2knowledge.de> wrote:
> Union and Sort seems not naturally connected to me. Union is a set
> operation and according to the documentation it seems that the
> implementation is using some sorting...
> But there are other implementations which can be used for this set
> operation which do not use sorting and seems to have some better
> performance in some cases - will clearly depend on the underlying data!
>
> In[169]: dim = 1000000;
> list = RandomChoice[Range[299], dim];
> (a = Union[list]); // Timing
> (b = Tally[list][[All, 1]]); // Timing
> a == Sort[b]
>
> Out[171]= {0.222803, Null}
>
> Out[172]= {0.003932, Null}
>
> Out[173]= True
>
> Ulrich
>
> Am 15.12.2011 um 10:55 schrieb David Bailey:
>
>> On 14/12/2011 11:10, Michael Stern wrote:
>>> I have noticed that if combine two lists of date/data objects using
>>> Union[], the result is sorted by date.
>>>
>>> For example
>>>
>>> In[]:= mins={{{2001, 1, 31}, 0.993268}, {{2002, 3, 31}, 1.01395},
>>> {{2003, 6, 30},
>>> 1.08647}, {{2005, 11, 30}, 1.14752}, {{2006, 9, 30},
>>> 1.18938}, {{2007, 2, 28}, 1.19658}, {{2008, 1, 31},
>>> 1.20432}, {{2011, 1, 31}, 1.37501}};
>>> In[]:= maxs={{{2000, 10, 31}, 1.01816}, {{2001, 12, 31}, =
> 1.02714},
>>> {{2004, 2, 29},
>>> 1.12702}, {{2005, 3, 31}, 1.16986}, {{2010, 10, 31}, 1.39026}};
>>>
>>> In[]:= Union[maxs, mins]
>>>
>>> Out[]= {{{2000, 10, 31}, 1.01816}, {{2001, 1, 31},
>>> 0.993268}, {{2001, 12, 31}, 1.02714}, {{2002, 3, 31},
>>> 1.01395}, {{2003, 6, 30}, 1.08647}, {{2004, 2, 29},
>>> 1.12702}, {{2005, 3, 31}, 1.16986}, {{2005, 11, 30},
>>> 1.14752}, {{2006, 9, 30}, 1.18938}, {{2007, 2, 28},
>>> 1.19658}, {{2008, 1, 31}, 1.20432}, {{2010, 10, 31},
>>> 1.39026}, {{2011, 1, 31}, 1.37501}}
>>>
>>> Is this reliable behavior? Is there any case in which Union would /not/
>>> return results that have been properly sorted by date?
>>>
>>> Thank you,
>>>
>>> -Michael Stern
>> Sorting is part of the operation, and you can rely on the result being
>> sorted.
>>
>> Mathematica obviously uses the most efficient way to perform the Union
>> operation, which is to sort the entire set of elements, and then perform
>> a scan through the elements, discarding adjacent duplicates.
>>
>> David Bailey
>> http://www.dbaileyconsultancy.co.uk
>>
>>
>
>
--
DrMajorBob at yahoo.com
- References:
- Re: Does Union[] reliably sort?
- From: David Bailey <dave@removedbailey.co.uk>
- Re: Does Union[] reliably sort?