MathGroup Archive 2004

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

Search the Archive

Re: Re: shuffling (randomizing) a series

  • To: mathgroup at smc.vnet.net
  • Subject: [mg52931] Re: [mg52896] Re: [mg52857] shuffling (randomizing) a series
  • From: DrBob <drbob at bigfoot.com>
  • Date: Fri, 17 Dec 2004 05:18:52 -0500 (EST)
  • References: <200412150926.EAA10600@smc.vnet.net> <200412160840.DAA27284@smc.vnet.net>
  • Reply-to: drbob at bigfoot.com
  • Sender: owner-wri-mathgroup at wolfram.com

The Needs statement has an extra "`" at the end, which keeps it from working:

>> Needs["DiscreteMath`Combinatorica``"]

Also, the following:

>> Table[list[[p[[i]]]],{i,Length[list]}]

can be replaced by the much simpler (and faster)

list[[p]]

For instance:

(inputs)
Needs["DiscreteMath`Combinatorica`"]
list = 1/Range@10
p = RandomPermutation@Length@list
list[[p]]

(outputs)
{1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10}
{1, 8, 7, 3, 9, 10, 4, 2, 6, 5}
{1, 1/8, 1/7, 1/3, 1/9, 1/10, 1/4, 1/2, 1/6, 1/5}

Bobby

On Thu, 16 Dec 2004 03:40:32 -0500 (EST), Sseziwa Mukasa <mukasa at jeol.com> wrote:

>
> On Dec 15, 2004, at 4:26 AM, George Szpiro wrote:
>
>> Hello,
>>
>> I would like to put a series of numbers (of the order of 10^7 numbers)
>> into
>> random order, i.e., to shuffle it. In Excel I would simply add a
>> column next
>> to the column with the data, and then sort by the random number. But I
>> could
>> only do this for 64000 numbers. How can I do that in Mathematica for a
>> file with a
>> much larger series?
>
> Without knowing the larger context of what you are doing it's hard to
> answer your question.  The expressions
>
> Needs["DiscreteMath`Combinatorica``"]
> p=RandomPermutation[10^7];
>
> will give a random permutation of length 10^7.  It takes about a minute
> to compute the permutation of that length on my machine.  You can then
> use the permutation to access your list.  Assuming it's in a variable
> named list:
>
> Table[list[[p[[i]]]],{i,Length[list]}]
>
> will return your list in random order.  If you prefer not to read the
> entire list into memory, create the permutation as above then use an
> expressions of the form
>
> strm=OpenRead["filename"];
> SetStreamPosition[strm,p[[n]]*(n-1)*size];
> val=Read[strm, type];
>
> will return the nth element of the permuted list where size is the size
> in bytes of each value and type is set appropriately.  Since I don't
> know how the list is to be used it's hard to write expressions that
> optimally trade off disk access versus memory use.
>
> Regards,
>
> Ssezi
>
>
>
>



-- 
DrBob at bigfoot.com
www.eclecticdreams.net


  • Prev by Date: Plotting a function of an interpolated function
  • Next by Date: Re: Re: Delete problem
  • Previous by thread: Re: shuffling (randomizing) a series
  • Next by thread: Re: shuffling (randomizing) a series