均匀分布的随机数
全页折叠
语法
X = rand
X = rand(n)
X = rand(sz1,...,szN)
X = rand(sz)
X = rand(___,typename)
X = rand(___,"like",p)
X = rand(s,___)
说明
X = rand
返回从区间 (0,1) 的均匀分布中得到的随机标量。
示例
X = rand(n)
返回一个由均匀分布的随机数组成的 n
×n
矩阵。
示例
X = rand(sz1,...,szN)
返回由随机数组成的 sz1
×...×szN
数组,其中 sz1,...,szN
指示每个维度的大小。例如:rand(3,4)
返回一个 3×4 的矩阵。
示例
X = rand(sz)
返回由随机数组成的数组,其中大小向量 sz
定义 size(X)
。例如:rand([3 4])
返回一个 3×4 的矩阵。
示例
X = rand(___,typename)
返回由 typename
数据类型的随机数组成的数组。typename
输入可以是 "single"
或 "double"
。您可以使用上述语法中的任何输入参量。
示例
X = rand(___,"like",p)
返回一个与 p
类似的由随机值组成的数组,它具有与 p
相同的数据类型和复/实性(实数或复数)。您可以指定 typename
或 "like"
,但不能同时指定两者。
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.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
指定随机数的数据类型。
打开实时脚本
创建一个由其元素为单精度值的随机数组成的 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 = 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
相同。
有关详细信息,请参阅Run MATLAB Functions on a GPU (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)。
有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (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 语法。
另请参阅
randi | randn | rng | RandStream | sprand | sprandn | randperm
主题
- 创建随机数数组
- 生成可重复的随机数
- 生成不同的随机数
- 特定范围内的随机数
- 球体内的随机数
- 创建和控制随机数流
- Class Support for Array-Creation Functions
- 更换不推荐的 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:
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)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 简体中文
- English
- 日本 (日本語)
- 한국 (한국어)
Contact your local office