Create random number streams


[s1,s2,...] = RandStream.create('gentype','NumStreams',n)
s = RandStream.create('gentype')
[ ... ] = RandStream.create('gentype', Name, Value,...)


[s1,s2,...] = RandStream.create('gentype','NumStreams',n) creates n random number streams that use the uniform pseudorandom number generator algorithm specified by gentype. The streams are independent in a pseudorandom sense. The streams are not necessarily independent from streams created at other times. RandStream.list returns all possible values for gentype or see Choosing a Random Number Generator for details on generator algorithms.


Multiple streams are not supported by all generator types. Use either the multiplicative lagged Fibonacci generator (mlfg6331_64) or the combined multiple recursive generator (mrg32k3a) to create multiple streams.

s = RandStream.create('gentype') creates a single random stream. The RandStream constructor is a more concise alternative when you need to create a single stream.

[ ... ] = RandStream.create('gentype', Name, Value,...) allows you to specify optional Name, Value pairs to control creation of the stream. The parameters are:

NumStreamsTotal number of streams of this type that will be created across sessions or labs. Default is 1.
StreamIndicesStream indices that should be created in this call. Default is 1:N, where N is the value given with the 'NumStreams' parameter.
SeedNonnegative scalar integer with which to initialize all streams. Default is 0. Seeds must be an integer between 0 and 232 − 1 or 'shuffle' to create a seed based on the current time.
NormalTransformTransformation algorithm used by randn(S, ...) to generate normal pseudorandom values. Options are 'Ziggurat', 'Polar', or 'Inversion'.
CellOutputLogical flag indicating whether or not to return the stream objects as elements of a cell array. Default is false.

Typically, you call RandStream.create once to create multiple independent streams in a single pass. Alternatively, you can create each stream from separate calls to RandStream.create, but you must specify the appropriate values for gentype, 'NumStreams', 'Seed', and 'StreamIndices' to ensure their independence:

  • Specify the same set of values for gentype, 'NumStreams', and 'Seed' in each case.

  • Specify a different value for 'StreamIndices' that is between 1 and the 'NumStreams' value in each case.


Create three independent streams.

[s1,s2,s3] = RandStream.create('mrg32k3a','NumStreams',3);
r1 = rand(s1,100000,1); 
r2 = rand(s2,100000,1); 
r3 = rand(s3,100000,1);

Create one stream from a set of three independent streams and designate it as the global stream.

s2 = RandStream.create('mrg32k3a','NumStreams',3,'StreamIndices',2);