Uniformly distributed random numbers
collapse all in page
Syntax
X = rand
X = rand(n)
X = rand(sz1,...,szN)
X = rand(sz)
X = rand(___,typename)
X = rand(___,"like",p)
X = rand(s,___)
Description
X = rand
returns a random scalar drawn from the uniform distribution in the interval (0,1).
example
X = rand(n)
returns an n
-by-n
matrix of uniformly distributed random numbers.
example
X = rand(sz1,...,szN)
returnsan sz1
-by-...-by-szN
array ofrandom numbers where sz1,...,szN
indicate the sizeof each dimension. For example, rand(3,4)
returnsa 3-by-4 matrix.
example
X = rand(sz)
returns an array of random numbers where size vector sz
defines size(X)
. For example, rand([3 4])
returns a 3-by-4 matrix.
example
X = rand(___,typename)
returns an array of random numbers of data type typename
. The typename
input can be either "single"
or "double"
. You can use any of the input arguments in the previous syntaxes.
example
X = rand(___,"like",p)
returns an array of random numbers like p
; that is, of the same data type and complexity (real or complex) as p
. You can specify either typename
or "like"
, but not both.
X = rand(s,___)
generates numbers from random number stream s
instead of the default global stream. To create a stream, use RandStream. You can specify s
followed by any of the input argument combinations in previous syntaxes.
Examples
collapse all
Matrix of Random Numbers
Open Live Script
Generate a 5-by-5 matrix of uniformly distributed random numbers between 0 and 1.
r = rand(5)
r = 5×5 0.8147 0.0975 0.1576 0.1419 0.6557 0.9058 0.2785 0.9706 0.4218 0.0357 0.1270 0.5469 0.9572 0.9157 0.8491 0.9134 0.9575 0.4854 0.7922 0.9340 0.6324 0.9649 0.8003 0.9595 0.6787
Random Numbers Within Specified Interval
Open Live Script
Generate a 10-by-1 column vector of uniformly distributed numbers in the interval (-5,5).
r = -5 + (5+5)*rand(10,1)
r = 10×1 3.1472 4.0579 -3.7301 4.1338 1.3236 -4.0246 -2.2150 0.4688 4.5751 4.6489
In general, you can generate N
random numbers in the interval (a,b) with the formula r = a + (b-a).*rand(N,1)
.
Random Integers
Open Live Script
Use the randi
function (instead of rand
) to generate 5 random integers from the uniform distribution between 10 and 50.
r = randi([10 50],1,5)
r = 1×5 43 47 15 47 35
Reset Random Number Generator
Open Live Script
Save the current state of the random number generator and create a 1-by-5 vector of random numbers.
s = rng;r = rand(1,5)
r = 1×5 0.8147 0.9058 0.1270 0.9134 0.6324
Restore the state of the random number generator to s
, and then create a new 1-by-5 vector of random numbers. The values are the same as before.
rng(s);r1 = rand(1,5)
r1 = 1×5 0.8147 0.9058 0.1270 0.9134 0.6324
3-D Array of Random Numbers
Open Live Script
Create a 3-by-2-by-3 array of random numbers.
X = rand([3,2,3])
X = X(:,:,1) = 0.8147 0.9134 0.9058 0.6324 0.1270 0.0975X(:,:,2) = 0.2785 0.9649 0.5469 0.1576 0.9575 0.9706X(:,:,3) = 0.9572 0.1419 0.4854 0.4218 0.8003 0.9157
Specify Data Type of Random Numbers
Open Live Script
Create a 1-by-4 vector of random numbers whose elements are single precision.
r = rand(1,4,"single")
r = 1x4 single row vector 0.8147 0.9058 0.1270 0.9134
class(r)
ans = 'single'
Size Defined by Existing Array
Open Live Script
Create a matrix of uniformly distributed random numbers with the same size as an existing array.
A = [3 2; -2 1];sz = size(A);X = rand(sz)
X = 2×2 0.8147 0.1270 0.9058 0.9134
It is a common pattern to combine the previous two lines of code into a single line:
X = rand(size(A));
Size and Data Type Defined by Existing Array
Open Live Script
Create a 2-by-2 matrix of single-precision random numbers.
p = single([3 2; -2 1]);
Create an array of random numbers that is the same size and data type as p
.
X = rand(size(p),"like",p)
X = 2x2 single matrix 0.8147 0.1270 0.9058 0.9134
class(X)
ans = 'single'
Random Complex Numbers
Open Live Script
Generate 10 random complex numbers from the uniform distribution over a square domain with real and imaginary parts in the interval (0,1).
a = rand(10,1,"like",1i)
a = 10×1 complex 0.8147 + 0.9058i 0.1270 + 0.9134i 0.6324 + 0.0975i 0.2785 + 0.5469i 0.9575 + 0.9649i 0.1576 + 0.9706i 0.9572 + 0.4854i 0.8003 + 0.1419i 0.4218 + 0.9157i 0.7922 + 0.9595i
Input Arguments
collapse all
n
— Size of square matrix
integer value
Size of square matrix, specified as an integer value.
If
n
is0
, thenX
isan empty matrix.If
n
is negative, then it is treatedas0
.
Data Types: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
sz1,...,szN
— Size of each dimension (as separate arguments)
integer values
Size of each dimension, specified as separate arguments of integervalues.
If the size of any dimension is
0
,thenX
is an empty array.If the size of any dimension is negative, then itis treated as
0
.Beyond the second dimension,
rand
ignorestrailing dimensions with a size of 1. For example,rand(3,1,1,1)
producesa 3-by-1 vector of random numbers.
Data Types: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
sz
— Size of each dimension (as a row vector)
integer values
Size of each dimension, specified as a row vector of integervalues. Each element of this vector indicates the size of the correspondingdimension:
If the size of any dimension is
0
,thenX
is an empty array.If the size of any dimension is negative, then itis treated as
0
.Beyond the second dimension,
rand
ignores trailing dimensions with a size of 1. For example,rand([3 1 1 1])
produces a 3-by-1 vector of random numbers.
Example: sz = [2 3 4]
creates a 2-by-3-by-4 array.
Data Types: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
typename
— Data type (class) to create
"double"
(default) | "single"
Data type (class) to create, specified as "double"
, "single"
, or the name of another class that provides rand
support.
Example: rand(5,"single")
p
— Prototype of array to create
numeric array
Prototype of array to create, specified as a numeric array.
Example: rand(5,"like",p)
Data Types: single
| double
Complex Number Support: Yes
s
— Random number stream
RandStream
object
Random number stream, specified as a RandStream object.
Example: s = RandStream("dsfmt19937"); rand(s,[3 1])
Tips
The sequence of numbers produced by
rand
isdetermined by the internal settings of the uniform pseudorandom numbergenerator that underliesrand
,randi
,andrandn
. You can control that shared random numbergenerator using rng.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
The data type (class) must be a built-in MATLAB® numeric type. For other classes, the static
rand
method is not invoked. For example,rand(sz,'myclass')
does not invokemyclass.rand(sz)
.Size arguments must have a fixed size.
See Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder).
If extrinsic calls are enabled and
rand
is not called from inside aparfor
loop, generated MEX files use the same random number state as MATLAB in serial code. Otherwise, the generated MEX code and standalone code maintain their own random number state that is initialized to the same state as MATLAB.
Thread-Based Environment
Run code in the background using MATLAB® backgroundPool
or accelerate code with Parallel Computing Toolbox™ ThreadPool
.
This function fully supports thread-based environments. For more information, see Run MATLAB Functions in Thread-Based Environment.
GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.
Usage notes and limitations:
The stream syntax
rand(
is not supported on a GPU.s
,___)You can specify
typename
as'gpuArray'
. If you specifytypename
as'gpuArray'
, the default underlying type of the array isdouble
.To create a GPU array with underlying type
datatype
, specify the underlying type as an additional argument beforetypename
. For example,X = rand(3,datatype,'gpuArray')
creates a 3-by-3 GPU array of random numbers with underlying typedatatype
.You can specify the underlying type
datatype
as one of these options:'double'
'single'
You can also specify the numeric variable
p
as agpuArray
.If you specify
p
as agpuArray
, the underlying type of the returned array is the same asp
.
For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Distributed Arrays
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.
Usage notes and limitations:
The stream syntax
rand(
is not supported fors
,___)codistributed
ordistributed
arrays.You can specify
typename
as'codistributed'
or'distributed'
. If you specifytypename
as'codistributed'
or'distributed'
, the default underlying type of the returned array isdouble
.To create a distributed or codistributed array with underlying type
datatype
, specify the underlying type as an additional argument beforetypename
. For example,X = rand(3,datatype,'distributed')
creates a 3-by-3 distributed matrix of random numbers with underlying typedatatype
.You can specify the underlying type
datatype
as one of these options:'double'
'single'
You can also specify
p
as acodistributed
ordistributed
array.If you specify
p
as acodistributed
ordistributed
array, the underlying type of the returned array is the same asp
.For additional
codistributed
syntaxes, see rand (codistributed) (Parallel Computing Toolbox).
For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Version History
Introduced before R2006a
expand all
R2022a: Match complexity with "like"
, and use "like"
with RandStream
object
The "like"
input supports both real and complex prototype arrays. For example:
r = rand(2,2,"like",1i)
r = 0.8147 + 0.9058i 0.6324 + 0.0975i 0.1270 + 0.9134i 0.2785 + 0.5469i
All syntaxes support this feature. Also, you can now use "like"
with a RandStream
object as the first input of rand
.
R2014a: Match data type of an existing variable with 'like'
To generate random numbers with the same data type as an existing variable, use the syntax rand(__,'like',p)
. For example:
A = single(pi);r = rand(4,4,'like',A);class(r)
ans = single
This feature is not available when passing a RandStream
object as the first input to rand
.
R2013b: Non-integer size inputs are not supported
Specifying a dimension that is not an integer causes an error. Use floor to convert non-integer size inputs to integers.
R2008b: 'seed'
, 'state'
, and 'twister'
inputs are not recommended
There are no plans to remove these inputs, which control the random number generator that underlies rand
, randi
and randn
. However, the rng function is recommended instead for these reasons:
The
'seed'
and'state'
generators are flawed.The terms
'seed'
and'state'
are misleading names for the generators.'seed'
refers to the MATLAB v4 generator, not the seed initialization value.'state'
refers to the v5 generators, not the internal state of the generator.These three inputs unnecessarily use different generators for
rand
andrandn
.
For information on updating your code, see Replace Discouraged Syntaxes of rand and randn.
See Also
randi | randn | rng | RandStream | sprand | sprandn | randperm
Topics
- Create Arrays of Random Numbers
- Generate Random Numbers That Are Repeatable
- Generate Random Numbers That Are Different
- Random Numbers Within a Specific Range
- Random Numbers Within a Sphere
- Creating and Controlling a Random Number Stream
- Class Support for Array-Creation Functions
- Replace Discouraged Syntaxes of rand and randn
- Why Do Random Numbers Repeat After Startup?
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom (English)
Contact your local office