rand
均匀分布的随机数
语法
说明
X = rand
返回从区间 (0,1) 的均匀分布中得到的随机标量。
X = rand(
返回由随机数组成的 sz1,...,szN
)sz1
×...×szN
数组,其中 sz1,...,szN
指示每个维度的大小。例如:rand(3,4)
返回一个 3×4 的矩阵。
X = rand(___,
返回由 typename
)typename
数据类型的随机数组成的数组。typename
输入可以是 "single"
或 "double"
。您可以使用上述语法中的任何输入参量。
X = rand(
从随机数流 s
,___)s
而不是默认全局流生成数字。要创建一个流,请使用 RandStream
。您可以指定 s
,后跟上述语法中的任何输入参量组合。
示例
由随机数组成的矩阵
生成一个由介于 0 和 1 之间的均匀分布的随机数组成的 5×5 矩阵。
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
指定区间内的随机数
生成一个由区间 (-5,5) 内均匀分布的数字组成的 10×1 列向量。
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
一般来说,可以使用公式 r = a + (b-a).*rand(N,1)
生成区间 (a,b) 内的 N
个随机数。
随机整数
使用 randi
函数(而不是 rand
)生成在 10 和 50 之间均匀分布的 5 个随机整数。
r = randi([10 50],1,5)
r = 1×5
43 47 15 47 35
重置随机数生成器
保存随机数生成器的当前状态并创建一个由随机数组成的 1×5 向量。
s = rng; r = rand(1,5)
r = 1×5
0.8147 0.9058 0.1270 0.9134 0.6324
将随机数生成器的状态恢复为 s
,然后创建一个由随机数组成的新 1×5 向量。值与之前相同。
rng(s); r1 = rand(1,5)
r1 = 1×5
0.8147 0.9058 0.1270 0.9134 0.6324
由随机数组成的三维数组
创建一个由随机数组成的 3×2×3 数组。
X = rand([3,2,3])
X = X(:,:,1) = 0.8147 0.9134 0.9058 0.6324 0.1270 0.0975 X(:,:,2) = 0.2785 0.9649 0.5469 0.1576 0.9575 0.9706 X(:,:,3) = 0.9572 0.1419 0.4854 0.4218 0.8003 0.9157
指定随机数的数据类型。
创建一个由其元素为单精度值的随机数组成的 1×4 向量。
r = rand(1,4,"single")
r = 1x4 single row vector
0.8147 0.9058 0.1270 0.9134
class(r)
ans = 'single'
现有数组定义的大小
创建一个由均匀分布的随机数组成并且大小与现有数组相同的矩阵。
A = [3 2; -2 1]; sz = size(A); X = rand(sz)
X = 2×2
0.8147 0.1270
0.9058 0.9134
它是一种将前两行代码合并成一行的常见模式:
X = rand(size(A));
现有数组定义的大小和数据类型
创建一个由单精度随机数组成的 2×2 矩阵。
p = single([3 2; -2 1]);
创建一个与 p
具有相同大小和数据类型的由随机数组成的数组。
X = rand(size(p),"like",p)
X = 2x2 single matrix
0.8147 0.1270
0.9058 0.9134
class(X)
ans = 'single'
随机复数
从一个方域上的均匀分布生成 10 个实部和虚部位于区间 (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
输入参数
n
— 方阵的大小
整数值
方阵的大小,指定为整数值。
如果
n
为0
,则X
为一个空矩阵。如果
n
为负数,则将其视为0
。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
sz1,...,szN
— 每个维度的大小(作为单独参量)
整数值
每个维度的大小,指定为包含整数值的单独参量。
如果任一维度的大小为
0
,则X
为空数组。如果任何维度的大小为负值,则其将被视为
0
。对于第二个维度以上的维度,
rand
忽略大小为 1 的尾部维度。例如,rand(3,1,1,1)
生成由随机数组成的 3×1 向量。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
sz
— 每个维度的大小(作为行向量)
整数值
每个维度的大小,指定为由整数组成的行向量。此向量的每个元素指示对应维度的大小:
如果任一维度的大小为
0
,则X
为空数组。如果任何维度的大小为负值,则其将被视为
0
。对于第二个维度以上的维度,
rand
忽略大小为 1 的尾部维度。例如,rand([3 1 1 1])
生成由随机数组成的 3×1 向量。
示例: sz = [2 3 4]
创建一个 2×3×4 数组。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
typename
— 要创建的数据类型(类)
"double"
(默认) | "single"
要创建的数据类型(类),指定为 "double"
、"single"
或提供 rand
支持的其他类的名称。
示例: rand(5,"single")
p
— 要创建的数组的原型
数值数组
要创建的数组的原型,指定为数值数组。
示例: rand(5,"like",p)
数据类型: single
| double
复数支持: 是
s
— 随机数流
RandStream
对象
随机数流,指定为 RandStream
对象。
示例: s = RandStream("dsfmt19937"); rand(s,[3 1])
提示
rand
生成的数字序列由均匀伪随机数生成器的内部设置决定,该生成器是rand
、randi
和randn
的基础。您可以使用rng
控制这一共享的随机数生成器。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
数据类型(类)必须为内置的 MATLAB® 数值类型。对于其他类,将不调用静态
rand
方法。例如,rand(sz,'myclass')
不会调用myclass.rand(sz)
。大小参量必须具有固定大小。
请参阅Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder)。
如果启用外部调用并且不从
parfor
循环内部调用rand
,则生成的 MEX 文件使用与串行代码中的 MATLAB 相同的随机数状态。否则,生成的 MEX 代码和独立代码保持其自己的随机数状态,该状态初始化为与 MATLAB 相同的状态。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
GPU 不支持流语法
rand(
。s
,___)您可以将
typename
指定为'gpuArray'
。如果将typename
指定为'gpuArray'
,则数组的默认基础类型是double
。要创建基础类型
datatype
的 GPU 数组,请在typename
之前将该基础类型指定为附加参量。例如,X = rand(3,datatype,'gpuArray')
创建一个由基础类型datatype
的随机数组成的 3×3 的 GPU 数组。您可以将基础类型
datatype
指定为以下选项之一:'double'
'single'
您也可以将数值变量
p
指定为gpuArray
。如果将
p
指定为gpuArray
,则返回的数组的基础类型与p
相同。
有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
用法说明和限制:
codistributed
或distributed
数组不支持流语法rand(
。s
,___)您可以将
typename
指定为'codistributed'
或'distributed'
。如果将typename
指定为'codistributed'
或'distributed'
,则返回的数组的默认基础类型为double
。要创建基础类型
datatype
的分布式或共存分布式数组,请在typename
之前将该基础类型指定为附加参量。例如,X = rand(3,datatype,'distributed')
创建一个由基础类型datatype
的随机数组成的 3×3 分布式矩阵。您可以将基础类型
datatype
指定为以下选项之一:'double'
'single'
您也可以将
p
指定为codistributed
或distributed
数组。如果将
p
指定为codistributed
或distributed
数组,则返回的数组的基础类型与p
相同。有关其他
codistributed
语法,请参阅rand (codistributed)
(Parallel Computing Toolbox)。
有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出R2022a: 使用 "like"
匹配复/实性,并将 "like"
与 RandStream
对象结合使用
"like"
输入既支持实数原型数组,也支持复数原型数组。例如:
r = rand(2,2,"like",1i)
r = 0.8147 + 0.9058i 0.6324 + 0.0975i 0.1270 + 0.9134i 0.2785 + 0.5469i
所有语法都支持此功能。此外,您现在还可以将 "like"
与作为 rand
的第一个输入的 RandStream
对象一起使用。
R2014a: 使用 'like'
匹配现有变量的数据类型
要生成与现有变量具有相同数据类型的随机数,请使用语法 rand(__,'like',p)
。例如:
A = single(pi); r = rand(4,4,'like',A); class(r)
ans = single
RandStream
对象作为 rand
的第一个输入进行传递时,此功能不可用。R2013b: 不支持非整数大小输入
指定非整数维度会导致错误。使用 floor
将非整数大小输入转换为整数。
R2008b: 不推荐使用 'seed'
、'state'
和 'twister'
输入
目前没有删除这些输入的计划,它们用于控制作为 rand
、randi
和 randn
基础的随机数生成器。但推荐使用 rng
函数,原因如下:
'seed'
和'state'
生成器有缺陷。'seed'
和'state'
这两个词是具有误导性的生成器名称。'seed'
指的是 MATLAB v4 生成器,而不是种子初始化值。'state'
指的是 v5 生成器,而不是生成器的内部状态。这三个输入对
rand
和randn
使用不同的生成器,而这是没有必要的。
有关更新代码的信息,请参阅更换不推荐的 rand 和 randn 语法。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
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:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
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
- United Kingdom (English)