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
- References:
- shuffling (randomizing) a series
- From: George Szpiro <george@netvision.net.il>
- Re: shuffling (randomizing) a series
- From: Sseziwa Mukasa <mukasa@jeol.com>
- shuffling (randomizing) a series