MATLAB - 随机数



随机数是从一大组数字中随机选择的数字。计算机生成的随机数称为伪随机数。伪随机数生成利用一种算法,该算法内部利用数学公式生成不可预测的随机数字位。伪随机数在计算机应用中非常有用,例如游戏、密码学等。

Matlab 提供了许多函数,例如 rand、randn 和 randi,可以生成随机数。对于高级随机数,我们可以使用 RandStream 类。

另一个函数 randperm 创建整数的随机排列。

让我们通过示例来了解每个函数。

使用 rand 函数

rand - 此函数将返回均匀分布的随机数。函数的语法如下所述。

语法

a = rand
a = rand(n)
a = rand(sz1, sz2,.....szn)
a = rand(sz)
a = rand(_, typename)
a = rand(_, “like”, p)
a = rand(s,_)
序号 语法和描述
1

a = rand

这将返回一个 0 到 1 之间的随机数。

2

a = rand(n)

这将返回一个均匀分布的随机数。它将是一个 nxn 矩阵。

3

a = rand(sz1, sz2,.....szn)

这将返回一个大小为 sz1 x szn 的均匀分布的随机数数组。

例如,rand(2,3) 返回一个大小为 2×3 的矩阵。因此,随机数数组的大小将为 2×3。

4

a = rand(sz)

这里的向量大小为 sz。该函数将返回一个大小为 sz 的随机数数组。例如,rand([2,3]) 将返回一个大小为 2×3 的数组。

5

a = rand(_, typename)

此处返回的随机数数组的类型为 typename。例如,“single”、“double”。

6

a = rand(_, “like”, p)

这将为您提供一个与 p 具有相同数据类型或复杂性(实数或复数)的随机数数组。您可以使用 typename 或“like”,但不能同时使用两者。

7

a = rand(s, _)

随机数是从流 s 中创建的。您可以使用 RandStream 创建一个流。

让我们看看上面讨论的每种语法的示例。

示例 1

a = rand

执行后的输出如下:

a = 0.9584

在这个例子中,我们只是调用 rand 函数。该值存储在变量 a 中。

给定的值为 0.9584,生成的数值介于 0 到 1 之间。

让我们再次调用 rand 函数。

a= rand

执行后的输出如下:

a = 0.075312

再次使用相同的函数,值现在为 0.075312。

示例 2

在这个例子中,我将尝试使用 n 值调用 rand。

a = rand(4)

执行后的输出如下:

a =

   0.750825   0.930217   0.168903   0.781070
   0.732294   0.017075   0.545846   0.483156
   0.609990   0.311062   0.415960   0.369801
   0.871756   0.556813   0.401244   0.225472

我们传递给 rand 的数字是 4。因此,它返回一个大小为 4x4 的矩阵,其中包含如上所示的随机数。

现在让我们使用数字 2 并查看如下所示的 2x2 矩阵:

a = rand(2)

执行后的输出如下:

a =

   0.8271   0.5491
   0.9997   0.1035

示例 3

在这个例子中,我们将 nxn 矩阵传递给 rand 函数。

a = rand(3,3)

执行后的输出如下:

a =

   0.5684   0.3099   0.4883
   0.7016   0.8126   0.9140
   0.2272   0.4579   0.8909

生成的矩阵大小为 3x3。

让我们检查另一个具有 2x4 矩阵的示例。

a = rand(2,4)

执行后的输出如下:

a =

   0.5362   0.6302   0.8595   0.4848
   0.3148   0.1463   0.6696   0.5108

示例 4

在这个例子中,我们将使用大小为 [3,4] 的向量数组在 rand 函数中,如下所示

a =  rand([3,4])

执行后的输出如下:

a =

   8.6458e-01   4.6462e-03   6.8987e-01   5.7768e-01
   7.2335e-01   2.8741e-01   3.4124e-01   7.6021e-02
   2.8896e-01   6.9273e-01   4.4906e-01   8.4528e-01

输出是一个 3x4 矩阵。

让我们尝试另一个具有 [2,2] 向量数组的示例。

a = rand([2,2])

执行后的输出如下:

a =

   0.6734   0.4422
   0.4438   0.3153

示例 5

在这个例子中,我们将传递 typename 并查看生成的随机数的输出。

a = rand(3,"single")

执行后的输出如下:

a =

   0.124537   0.265118   0.110287
   0.395455   0.102573   0.826784
   0.062113   0.124306   0.141749

第一个参数是 3,因此它将创建一个 3x3 的单精度 typename 矩阵。

让我们看看另一个例子

a = rand([2,3], "double")

执行后的输出如下:

a =

   0.078242   0.617494   0.702426
   0.721792   0.878933   0.199488

在上面的例子中,我们传递了一个 [2,3] 向量,它生成一个类型为 double 的 2x3 矩阵。

示例 6

在这个例子中,让我们首先创建一个大小为 2x2 的单精度矩阵。

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

执行后的输出如下:

p =

   3   2
  -2   1

现在让我们在 rand 函数中使用 p,如下所示

a = rand(size(p),"like",p)

执行后的输出如下:

a =

  2×2 single matrix

    0.1966    0.6160
    0.2511    0.4733

它返回一个大小为 2x2 的随机数矩阵。

示例 7

在这个例子中,让我们首先创建一个流,如下所示:

s = RandStream('dsfmt19937')

现在让我们在 rand 函数中使用流 s,如下所示:

a = rand(s,[3 3])

使用 randn 函数

randn - 此函数与 rand 相同,唯一的区别是它将返回正态分布的随机数。函数的语法如下所述。

语法

a = randn
a = randn(n)
a = randn(sz1, sz2,.....szn)
a = randn(sz)
a = randn(_, typename)
a = randn(_, “like”, p)
a = randn(s,_)
序号 语法和描述
1

a = randn

这将从标准正态分布返回一个随机标量数。

2

a = rand(n)

这将返回一个来自标准正态分布的 nxn 矩阵。

3

a = rand(sz1, sz2,.....szn)

这将返回一个大小为 sz1 x szn 的随机数数组。

例如,rand(2,3) 返回一个大小为 2x3 的矩阵。因此,随机数数组的大小将为 2x3。

4

a = rand(sz)

这里的向量大小为 sz。该函数将返回一个大小为 sz 的随机数数组。例如,rand([2,3]) 将返回一个大小为 2x3 的数组。

5

a = rand(_, typename)

此处返回的随机数数组的类型为 typename。例如,“single”、“double”。

6

a = rand(_, “like”, p)

这将为您提供一个与 p 具有相同数据类型或复杂性(实数或复数)的随机数数组。您可以使用 typename 或“like”,但不能同时使用两者。

7

a = rand(s, _)

随机数是从流 s 中创建的。您可以使用 RandStream 创建一个流。

让我们看看上面讨论的每种语法的示例。

示例 1

a = randn

执行后的输出如下:

a = -0.1226

在这个例子中,我们只是调用 randn 函数。该值存储在变量 a 中。

给定的值为 0.5377,该值是从标准正态分布生成的,即它的均值为 0,标准差为 1。

示例 2

在这个例子中,我将尝试使用 n 值调用 randn。

a = randn(2)

执行后的输出如下:

a =

   0.1708  -0.9527
   1.8627   2.8103

我们传递给 randn 的数字是 2。因此,它返回一个大小为 2x2 的矩阵,其中包含如上所示的随机数。

示例 3

在这个例子中,我们将 nxn 矩阵传递给 rand 函数。

a = randn(3,3)

执行后的输出如下:

a =

   0.067762   0.519480  -0.568026
   0.267630   0.232140  -1.267290
   0.808611   1.462018   1.039429

生成的矩阵大小为 3x3。

示例 4

在这个例子中,我们将使用大小为 [3,4] 的向量数组在 randn 函数中,如下所示

a = randn([3,4])

执行后的输出如下:

a =

  -0.2043  -0.4831  -0.4446   0.4228
   0.2926   2.2891   1.5870   0.3228
   0.4624  -1.0989   1.2035  -0.4612

输出是一个 3x4 矩阵。

示例 5

在这个例子中,我们将传递 typename 并查看生成的随机数的输出。

a = randn(3,"single")

执行后的输出如下:

a =

   1.6072  -0.4121   0.2886
   0.7244   1.3422   0.9589
   0.9034   0.6775  -0.5273

第一个参数是 3,因此它将创建一个 3x3 的单精度 typename 矩阵。

示例 6

在这个例子中,让我们首先创建一个大小为 2x2 的单精度矩阵。

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

执行后的输出如下:

p =

   3   2
  -2   1

现在让我们在 rand 函数中使用 p,如下所示

a = randn(size(p),"like",p)

它返回一个大小为 2x2 的随机数矩阵。

示例 7

在这个例子中,让我们首先创建一个流,如下所示:

s = RandStream('dsfmt19937')

现在让我们在 randn 函数中使用流 s,如下所示

a = randn(s,[3 3])

使用 randi 函数

randi - 处理均匀分布的伪随机整数。

语法

a = randi(imax)
a = randi(imax,n)
a = randi(imax,sz1,...,szN)
a = randi(imax,sz)
a = randi(___,typename)
a = randi(___,"like",p)
a = randi([imin,imax],___)
a = randi(s,___)
序号 语法和描述
1

a = randi(imax)

这将返回一个介于 0 到 imax 之间的伪随机标量整数。

2

a = randi(imax,n)

这将返回一个 nxn 矩阵,其中包含介于 [1, imax] 之间的整数。

3

a = randi(imax,sz1,...,szN)

这将返回一个大小为 sz1 x szn 的随机整数数组。

例如,randi(10, 2,3) 返回一个大小为 2x3 的矩阵,其中包含介于 1 到 10 之间的伪随机整数。

4

a = randi(imax,sz)

这里的向量大小为 sz。该函数将返回一个大小为 sz 的随机整数数组。例如,randi(10, [2,3]) 将返回一个大小为 2x3 的数组,其中包含介于 1 到 10 之间的随机整数。

5

a = randi(_, typename)

介于 1 到 imax 之间的随机整数数组,类型为 typename。例如,“single”、“double”、“int8”、“uint8”、“int16”、“uint16”、“int32”、“uint32”或“logical”。

6

a = rand(_, “like”, p)

这将为您提供一个伪随机整数数组,类似于 p 或复杂度(实数或复数)类似于 p。您可以使用 typename 或“like”,但不能同时使用两者。

7

a = randi([imin,imax],___)

这将返回一个伪随机整数数组,该数组位于 imin 和 imax 指定的区间内。

8

a = rand(s, _)

随机数由流s创建。您可以使用 RandStream 创建流。

示例 1

在这个例子中,让我们看看 a = randi(imax) 的输出。

a = randi(6)

执行后的输出如下:

a = 2

示例 2

在这个例子中,我们将看到 a = randi(imax,n) 的输出。

a = randi(5,3)

执行后的输出如下:

a =

   5   1   5
   1   4   1
   5   2   5

示例 3

让我们检查 a = randi(imax,sz1,...,szN) 的输出。

这里 imax 将使用 8,矩阵大小将为 2,3。

a = randi(8,2,3)

执行后的输出如下:

a =

   7   4   2
   2   4   5

示例 4

让我们检查 a = randi(imax,sz) 的输出。

这里 imax 将使用 8,矩阵大小将为 [2,3]。

a = randi(8,[2,3])

执行后的输出如下:

a =

   6   7   5
   2   7   3

示例 5

在这个例子中,我们将传递 typename 并查看生成的随机整数的输出。

a = randi(5, "int32")

执行后的输出如下:

a = 3

示例 6

在这个例子中,我们将传递 typename 并查看生成的随机整数的输出。

a = randi(10,size(p),"like",p)

示例 7

在这个例子中,让我们检查 imin 和 imax 区间内的伪随机整数。

r = randi([1,5],3,3)  

执行后的输出如下:

r =

   3   2   3
   4   1   1
   1   4   1

imin 为 1,imax 为 5。大小为 3x3 的矩阵是从区间 [1,5] 生成的。

示例 8

在这个例子中,让我们首先创建一个流,如下所示:

s = RandStream('dsfmt19937')

如下所示,流在 randi 函数中使用。

a = randi(s,[1,10],[2 3])

使用 randperm 函数

randperm − 随机数通过整数的随机排列生成。

语法

a = randperm(n)
a = randperm(n,k)
a = randperm(s,___)
序号 语法和描述
1

a = randperm(n)

这将返回一个行向量,该向量包含 1 到 n 的排列整数,并且不会重复任何值。

2

a = randperm(n,k)

这将返回一个行向量,该向量包含从 1 到 n 的排列中随机选择的 k 个唯一整数。

3

a = randperm(s,___)

随机排列生成基于随机数流 s 的整数。

示例 1

在这个例子中,我们将查看使用 a = randperm(n) 生成的输出。我们将使用 n 为 10。因此排列将从 1 到 10 进行。

a = randperm(10)

执行后的输出如下:

a =

    8    7    5    4   10    6    2    1    3    9

示例 2

让我们检查从函数 a = randperm(n,k) 返回的 k 个唯一整数的行向量。其中 k = 5,n = 10。

a = randperm(10,5)

执行后的输出如下:

a =

    1    2   10    5    4

示例 3

在这个例子中,让我们使用流进行排列。

s = RandStream('dsfmt19937')

现在让我们在 a = randperm(s,___) 中使用流。

a = randperm(s,6)
广告