Uniformly distributed pseudorandom integers
collapse all in page
Syntax
X = randi(imax)
X = randi(imax,n)
X = randi(imax,sz1,...,szN)
X = randi(imax,sz)
X = randi(___,typename)
X = randi(___,"like",p)
X = randi([imin,imax],___)
X = randi(s,___)
Description
X = randi(imax)
returns a pseudorandom scalar integer between 1
and imax
.
example
X = randi(imax,n)
returns an n
-by-n
matrix of pseudorandom integers drawn from the discrete uniform distribution on the interval [1
,imax
].
X = randi(imax,sz1,...,szN)
returns an sz1
-by-...-by-szN
array where sz1,...,szN
indicate the size of each dimension. For example, randi(10,3,4)
returns a 3-by-4 array of pseudorandom integers between 1 and 10.
example
X = randi(imax,sz)
returns an array where size vector sz
defines size(X)
. For example, randi(10,[3 4])
returns a 3-by-4 array of pseudorandom integers between 1 and 10.
example
X = randi(___,typename)
returns an array of pseudorandom integers between 1
and imax
of data type typename
. The typename
input can be "single"
, "double"
, "int8"
, "uint8"
, "int16"
, "uint16"
, "int32"
, "uint32"
, or "logical"
. You can use any of the input arguments in the previous syntaxes.
example
X = randi(___,"like",p)
returns an array of pseudorandom integers like p
; that is, with the same data type and complexity (real or complex) as p
. You can specify either typename
or "like"
, but not both.
example
X = randi([imin,imax],___)
returns an array containing integers drawn from the discrete uniform distribution on the interval [imin
,imax
], using any of the above syntaxes.
X = randi(s,___)
generates integers 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
Square Matrix of Random Integers
Open Live Script
Generate a 5-by-5 matrix of random integers between 1 and 10. The first input to randi
indicates the largest integer in the sampling interval (the smallest integer in the interval is 1).
r = randi(10,5)
r = 5×5 9 1 2 2 7 10 3 10 5 1 2 6 10 10 9 10 10 5 8 10 7 10 9 10 7
Random Integers Within Specified Interval
Open Live Script
Generate a 10-by-1 column vector of uniformly distributed random integers from the sample interval [-5,5]
.
r = randi([-5,5],10,1)
r = 10×1 3 4 -4 5 1 -4 -2 1 5 5
Control Random Number Generation
Open Live Script
Save the current state of the random number generator and create a 1-by-5 vector of random integers.
s = rng;r = randi(10,1,5)
r = 1×5 9 10 2 10 7
Restore the state of the random number generator to s
, and then create a new 1-by-5 vector of random integers. The values are the same as before.
r1 = 1×5 9 10 2 10 7
3-D Array of Random Integers
Open Live Script
Create a 3-by-2-by-3 array of uniformly distributed random integers between 1 and 500.
X = randi(500,[3,2,3])
X = X(:,:,1) = 408 457 453 317 64 49X(:,:,2) = 140 483 274 79 479 486X(:,:,3) = 479 71 243 211 401 458
Random Integers of Other Data Types
Open Live Script
Create a 1-by-4 vector of random numbers between 1 and 100 whose elements are of type int16
.
r = randi(100,1,4,"int16")
r = 1x4 int16 row vector 82 91 13 92
class(r)
ans = 'int16'
Size Defined by Existing Array
Open Live Script
Create a matrix of uniformly distributed random integers between 1 and 10 with the same size as an existing array.
A = [3 2; -2 1];sz = size(A);X = randi(10,sz)
X = 2×2 9 2 10 10
It is a common pattern to combine the previous two lines of code into a single line:
X = randi(10,size(A));
Size and Numeric Data Type Defined by Existing Array
Open Live Script
Create a 2-by-2 matrix of 8-bit signed integers.
p = int8([3 2; -2 1]);
Create an array of random integers that is the same size and data type as p
.
X = randi(10,size(p),"like",p)
X = 2x2 int8 matrix 9 2 10 10
class(X)
ans = 'int8'
Random Complex Integers
Since R2022a
Open Live Script
Generate 10 random complex integers from the discrete uniform distribution over a square domain with real and imaginary parts in the interval [-5,5]
.
a = randi([-5,5],10,1,"like",1i)
a = 10×1 complex 3.0000 + 4.0000i -4.0000 + 5.0000i 1.0000 - 4.0000i -2.0000 + 1.0000i 5.0000 + 5.0000i -4.0000 + 5.0000i 5.0000 + 0.0000i 3.0000 - 4.0000i -1.0000 + 5.0000i 3.0000 + 5.0000i
Random Logical Array
Since R2023a
Open Live Script
Create a 5-by-5 matrix of random logical values (0s and 1s) with a discrete uniform distribution.
r = randi([0 1],5,"logical")
r = 5x5 logical array 1 0 0 0 1 1 0 1 0 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1
Input Arguments
collapse all
imax
— Largest integer in sample interval
positive integer
Largest integer in sample interval, specified as a positiveinteger. randi
draws values from the uniform distributionin the sample interval [1,imax]
.
Example: randi(10,5)
imin
— Smallest integer in sample interval
1
(default) | scalar integer
Smallest integer in sample interval, specified as a scalar integer.
Both imin
and imax
mustbe integers that satisfy imin
≤ imax
.
For example, randi([50,100],5)
returns a5-by-5 matrix of random integers between (and including) 50 and 100.
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,
randi
ignorestrailing dimensions with a size of 1. For example,randi([5,10],3,1,1,1)
producesa 3-by-1 vector of random integers between 5 and 10.
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,
randi
ignores trailing dimensions with a size of 1. For example,randi([5,10],[3 1 1 1])
produces a 3-by-1 vector of random integers between 5 and 10.
Data Types: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
typename
— Data type (class) to create
"double"
(default) | "single"
| "int8"
| "uint8"
| "int16"
| "uint16"
| "int32"
| "uint32"
| "logical"
Data type (class) to create, specified as "double"
, "single"
, "int8"
, "uint8"
, "int16"
, "uint16"
, "int32"
, "uint32"
, "logical"
, or the name of another class that provides randi
support.
Example: randi(5,5,"int8")
p
— Prototype of array to create
numeric array | logical array
Prototype of array to create, specified as a numeric or logical array.
Example: randi(5,5,"like",p)
Data Types: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
Complex Number Support: Yes
s
— Random number stream
RandStream
object
Random number stream, specified as a RandStream object.
Example: s = RandStream("dsfmt19937"); randi(s,[5,10],[3 1])
Tips
The sequence of numbers produced by
randi
isdetermined by the internal settings of the uniform pseudorandom numbergenerator that underliesrand
,randi
,andrandn
. You can control that shared random numbergenerator using rng.The arrays returned by
randi
can contain repeated integer values. This behavior is sometimes referred to as sampling with replacement. Use randperm if you require all unique values.If
imin
andimax
are outside the range of the output type (as specified bytypename
or by the prototypep
), thenrandi
first creates random integers within the interval[imin,imax]
and converts any resulting out-of-range integers to the minimum or maximum value of the output type. For example:rng default;r = randi([-10 10],1,10)
r = 7 9 -8 9 3 -8 -5 1 10 10
rng default;r = randi([-10 10],1,10,"logical")
r = 1×10 logical array 1 1 0 1 1 0 0 1 1 1
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® numerictype. Does not invoke the static
randi
methodfor other classes. For example,randi(imax,sz,'myclass')
doesnot invokemyclass.randi(imax,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
randi
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
randi(
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 = randi(imax,3,datatype,'gpuArray')
creates a 3-by-3 GPU array of random integers in the range[1 imax]
with underlying typedatatype
.You can specify the underlying type
datatype
as one of these options:'double'
'single'
'logical'
'int8'
'uint8'
'int16'
'uint16'
'int32'
'uint32'
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
randi(
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 = randi(imax,3,datatype,'distributed')
creates a 3-by-3 distributed matrix of random integers in the range[1 imax]
with underlying typedatatype
.You can specify the underlying type
datatype
as one of these options:'double'
'single'
'int8'
'uint8'
'int16'
'uint16'
'int32'
'uint32'
'logical'
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 randi (codistributed) (Parallel Computing Toolbox).
For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Version History
Introduced in R2008b
expand all
R2023a: Create random logical array
You can create a random logical array by specifying typename
as "logical"
or the prototype p
as a logical array. For example, see Random Logical Array.
R2022a: Match complexity with "like"
, and use "like"
with RandStream
object
The "like"
input supports both real and complex prototype arrays. For example:
r = randi(2,2,"like",1i)
r = 2.0000 + 2.0000i 2.0000 + 1.0000i 1.0000 + 2.0000i 1.0000 + 2.0000i
All syntaxes support this feature. Also, you can now use "like"
with a RandStream
object as the first input of randi
.
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 randi(__,'like',p)
. For example:
A = single(pi);r = randi(4,4,'like',A);class(r)
ans = single
This feature is not available when passing a RandStream
object as the first input to randi
.
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.
See Also
rand | randn | rng | RandStream | randperm
Topics
- Random Integers
- Create Arrays of Random Numbers
- Generate Random Numbers That Are Repeatable
- Generate Random Numbers That Are Different
- Creating and Controlling a Random Number Stream
- Class Support for Array-Creation Functions
- 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