Main Content

randi

均匀分布的伪随机整数

说明

X = randi(imax) 返回一个介于 1imax 之间的伪随机整数标量。

示例

X = randi(imax,n) 返回 n×n 矩阵,其中包含从区间 [1,imax] 的均匀离散分布中得到的伪随机整数。

X = randi(imax,sz1,...,szN) 返回 sz1×...×szN 数组,其中 sz1,...,szN 指示每个维度的大小。例如,randi(10,3,4) 返回一个由介于 1 和 10 之间的伪随机整数组成的 3×4 数组。

示例

X = randi(imax,sz) 返回一个数组,其中大小向量 sz 定义 size(X)。例如,randi(10,[3 4]) 返回一个由介于 1 和 10 之间的伪随机整数组成的 3×4 数组。

示例

X = randi(___,typename) 返回一个由数据类型为 typename 的介于 1imax 之间的伪随机整数组成的数组。typename 输入可以是 "single""double""int8""uint8""int16""uint16""int32""uint32""logical"。您可以使用上述语法中的任何输入参数。

示例

X = randi(___,"like",p) 返回一个与 p 类似的伪随机整数数组;即具有与 p 相同的数据类型和复/实性(实数或复数)。您可以指定 typename"like",但不能同时指定两者。

示例

X = randi([imin,imax],___) 使用以上任何语法返回一个数组,其中包含从区间 [imin,imax] 的均匀离散分布中得到的整数。

X = randi(s,___) 从随机数流 s 而不是默认全局流生成整数。要创建一个流,请使用 RandStream。您可以指定 s,后跟上述语法中的任何输入参数组合。

示例

全部折叠

生成一个由介于 1 和 10 之间的随机整数组成的 5×5 矩阵。randi 的第一个输入指示采样区间中的最大整数(采样区间中的最小整数为 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

生成一个由样本区间 [-5,5] 中均匀分布的随机整数组成的 10×1 列向量。

r = randi([-5,5],10,1)
r = 10×1

     3
     4
    -4
     5
     1
    -4
    -2
     1
     5
     5

保存随机数生成器的当前状态并创建一个由随机整数组成的 1×5 向量。

s = rng;
r = randi(10,1,5)
r = 1×5

     9    10     2    10     7

将随机数生成器的状态恢复为 s,然后创建一个由随机整数组成的新 1×5 向量。值与之前相同。

rng(s);
r1 = randi(10,1,5)
r1 = 1×5

     9    10     2    10     7

创建一个由介于 1 和 500 之间的均匀分布的随机整数组成的 3×2×3 数组。

X = randi(500,[3,2,3])
X = 
X(:,:,1) =

   408   457
   453   317
    64    49


X(:,:,2) =

   140   483
   274    79
   479   486


X(:,:,3) =

   479    71
   243   211
   401   458

创建一个由 1 到 100 之间的随机数组成的 1×4 向量,其元素类型为 int16

r = randi(100,1,4,"int16")
r = 1x4 int16 row vector

   82   91   13   92

class(r)
ans = 
'int16'

创建一个由介于 1 和 10 之间的均匀分布的随机整数组成并且大小与现有数组相同的矩阵。

A = [3 2; -2 1];
sz = size(A);
X = randi(10,sz)
X = 2×2

     9     2
    10    10

它是一种将前两行代码合并成一行的常见模式:

X = randi(10,size(A));

创建一个由 8 位有符号整数组成的 2×2 矩阵。

p = int8([3 2; -2 1]);

创建一个与 p 具有相同大小和数据类型的由随机整数组成的数组。

X = randi(10,size(p),"like",p)
X = 2x2 int8 matrix

    9    2
   10   10

class(X)
ans = 
'int8'

自 R2022a 起

从一个方域上的离散均匀分布生成 10 个实部和虚部位于区间 [-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

自 R2023a 起

创建一个由服从某离散均匀分布的随机逻辑值(0 和 1)组成的 5×5 矩阵。

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

输入参数

全部折叠

示例区间中的最大整数,指定为一个正整数。randi 绘制示例区间 [1,imax] 中均匀分布的值。

示例: randi(10,5)

示例区间中的最小整数,指定为整数标量。

iminimax 都必须为满足 iminimax 的整数。

例如,randi([50,100],5) 返回一个由介于 50 和 100(包括二者)之间的随机整数组成的 5×5 矩阵。

方阵的大小,指定为整数值。

  • 如果 n0,则 X 为一个空矩阵。

  • 如果 n 为负数,则将其视为 0

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

每个维度的大小,指定为包含整数值的单独参数。

  • 如果任一维度的大小为 0,则 X 为空数组。

  • 如果任何维度的大小为负值,则其将被视为 0

  • 对于第二个维度以上的维度,randi 忽略大小为 1 的尾部维度。例如,randi([5,10],3,1,1,1) 生成由 5 和 10 之间的随机整数组成的 3×1 向量。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

每个维度的大小,指定为由整数组成的行向量。此向量的每个元素指示对应维度的大小:

  • 如果任一维度的大小为 0,则 X 为空数组。

  • 如果任何维度的大小为负值,则其将被视为 0

  • 对于第二个维度以上的维度,randi 忽略大小为 1 的尾部维度。例如,randi([5,10],[3 1 1 1]) 生成由 5 和 10 之间的随机整数组成的 3×1 向量。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

要创建的数据类型(类),指定为 "double""single""int8""uint8""int16""uint16""int32""uint32""logical" 或提供 randi 支持的其他类的名称。

示例: randi(5,5,"int8")

要创建的数组的原型,指定为数值或逻辑数组。

示例: randi(5,5,"like",p)

数据类型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical
复数支持:

随机数流,指定为 RandStream 对象。

示例: s = RandStream("dsfmt19937"); randi(s,[5,10],[3 1])

提示

  • randi 生成的数字序列由均匀伪随机数生成器的内部设置决定,该生成器是 randrandirandn 的基础。您可以使用 rng 控制这一共享的随机数生成器。

  • randi 返回的数组可以包含重复的整数值。此行为有时称为替换采样。如果您需要所有的唯一值,请使用 randperm

  • 如果 iminimax 在输出类型(如 typename 或原型 p 所指定)的范围之外,则 randi 首先在区间 [imin,imax] 内创建随机整数,并将任何产生的超出范围的整数转换为输出类型的最小值或最大值。例如:

    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

扩展功能

版本历史记录

在 R2008b 中推出

全部展开