I=
eye (n)
¶
I=
eye (m,n)
¶
I=
eye ([m n])
¶
I=
eye (…,class)
¶
返回一个单位矩阵。
如果使用单个标量参数调用n,返回一个squareNxN标识矩阵。
如果提供两个标量参数(m,n),eye
取them为行数和列数。如果给定具有两个元素的向量,eye
分别使用元素的值作为行数和列数。例如
eye (3) ⇒ 1 0 0 0 1 0 0 0 1
以下表达式都会返回相同的结果:
eye (2) ≡ eye (2, 2) ≡ eye (size ([1, 2; 3, 4]))
可选参数class,允许eye
返回指定类型的数组,如
val = zeros (n,m, "uint8")
调用eye
不带参数相当于用参数1调用它。任何负尺寸都视为零。这些奇怪的定义是为了与兼容MATLAB.
val=
ones (n)
¶
val=
ones (m,n)
¶
val=
ones (m,n,k, …)
¶
val=
ones ([m n…])
¶
val=
ones 喜欢var)
¶
val=
ones (…,class)
¶
返回元素均为1的矩阵或N维数组。
如果使用单个标量整数参数调用n,返回一个squareNxN矩阵。
如果使用两个或多个标量整数参数或整数向量调用,则返回具有给定维度的数组。
要创建值相同的常量矩阵,请使用以下表达式
val_matrix = val * ones (m, n)
如果变量var在之后指定"like"
,输出val将具有与相同的数据类型、复杂性和稀疏性var.
可选参数class指定返回数组的类,默认为double。例如
val = ones (m,n, "uint8")
详见: zeros.
val=
zeros (n)
¶
val=
zeros (m,n)
¶
val=
zeros (m,n,k, …)
¶
val=
zeros ([m n…])
¶
val=
zeros 喜欢var)
¶
val=
zeros (…,class)
¶
返回元素均为0的矩阵或N维数组。
如果使用单个标量整数参数调用,则返回一个squareNxN矩阵。
如果使用两个或多个标量整数参数或整数向量调用,则返回具有给定维度的数组。
如果变量var在之后指定"like"
,输出val将具有与相同的数据类型、复杂性和稀疏性var.
可选参数class指定返回数组的类,默认为double。例如
val = zeros (m,n, "uint8")
详见: ones.
B=
repmat (A,m)
¶
B=
repmat (A,m,n)
¶
B=
repmat (A,m,n,p…)
¶
B=
repmat (A, [m n])
¶
B=
repmat (A, [m n p…])
¶
重复矩阵或N-D数组。
形成大小的块矩阵mxn,带有矩阵的副本A作为每个元件。
如果n未指定,形成mxm块矩阵。如果沿两个以上维度进行复制,请指定跨每个维度进行复制的次数m,n,p,…,在第二个自变量的向量中。
y=
repelems (x,r)
¶
从中构造重复元素的向量x.
r是2xN指定要重复的元素以及重复每个元素的频率的整数矩阵。第一行中的条目,r(1,j),选择要重复的元素。第二行中的相应条目,r(2,j),指定重复计数。如果x是amatrix,那么的列x为了选择索引的目的,被想象为堆叠在彼此之上。总是返回行向量。
从概念上讲,结果计算如下:
y对于i=1:列(r)y=[y,x(r(1,r(2,i))];外循环
xxx=
repelem (x,R)
¶
xxx=
repelem (x,R_1, …,R_n)
¶
从中构造重复元素的数组x和重复指令R_1, ….
x必须是标量、向量或N维数组。
重复指令R_j必须是标量或向量。如果该指令是标量,则的每个组件x在尺寸上j重复R_j时间。如果指令是一个向量,那么它必须具有与相应维度相同数量的元素j属于x。在这种情况下k维度的第th个分量j以色列R_j(k)
时间。
如果x是标量或向量,那么repelem
只需一条重复指令即可调用R和repelem
将返回与输入方向相同的向量。
如果x是一个矩阵,那么至少有两个R_j必须指定s。
注意:使用repelem
带有向量x和的向量R_j相当于游程长度解码。
示例:
A = [1 2 3 4 5]; B = [2 1 0 1 2]; repelem (A, B) ⇒ 1 1 2 4 5 5
A = magic (3) ⇒ A = 8 1 6 3 5 7 4 9 2 B1 = [1 2 3]; B2 = 2; repelem (A, B1, B2) ⇒ 8 8 1 1 6 6 3 3 5 5 7 7 3 3 5 5 7 7 4 4 9 9 2 2 4 4 9 9 2 2 4 4 9 9 2 2
更多R_j可以指定的尺寸数x.任何超额R_j必须是标量(因为x的尺寸仅为1),并且x将在这些维度上被复制。
A = [1 2 3 4 5]; B1 = 2; B2 = [2 1 3 0 2]; B3 = 3; repelem (A, B1, B2, B3) ⇒ ans(:,:,1) = 1 1 2 3 3 3 5 5 1 1 2 3 3 3 5 5 ans(:,:,2) = 1 1 2 3 3 3 5 5 1 1 2 3 3 3 5 5 ans(:,:,3) = 1 1 2 3 3 3 5 5 1 1 2 3 3 3 5 5
R_j必须按顺序指定。占位符1可以用于不需要复制的维度。
repelem ([-1, 0; 0, 1], 1, 2, 1, 2) ⇒ ans(:,:,1,1) = -1 -1 0 0 0 0 1 1 ans(:,:,1,2) = -1 -1 0 0 0 0 1 1
如果更少R_j给定的维数大于中的维数x,repelem
将假定R_j对于这些尺寸为1。
A = cat (3, [-1 0; 0 1], [-1 0; 0 1]) ⇒ ans(:,:,1) = -1 0 0 1 ans(:,:,2) = -1 0 0 1 repelem (A,2,3) ⇒ ans(:,:,1) = -1 -1 -1 0 0 0 -1 -1 -1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 ans(:,:,2) = -1 -1 -1 0 0 0 -1 -1 -1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1
repelem
保留的类x,并与字符串、元胞数组、NA和NAN输入一起工作。如果有R_j如果为0,则输出将为空数组。
repelem ("Octave", 2, 3) ⇒ OOOccctttaaavvveee OOOccctttaaavvveee repelem ([1 2 3; 1 2 3], 2, 0) ⇒ [](4x0)
函数linspace
和logspace
使创建具有均匀或对数间隔元素的向量变得非常容易。详见范围.
y=
linspace (start,end)
¶
y=
linspace (start,end,n)
¶
返回带有的行向量n之间的线性间隔元件start和end.
如果元素的数量n大于1,则端点start和end总是包含在范围内。如果start大于end,元素按递减顺序存储。如果,则点数n则使用值100。
这个linspace
当两者都存在时,函数返回一个行向量start和end是标量。如果一个或两个输入都是向量,那么linspace
将它们转换为列向量,并返回一个矩阵,其中每行是之间的独立序列start(row_n),end(row_n)
.
编程说明:为了与兼容MATLAB,返回第二个参数(end)当单个值(n=1)。如果n不是整数,则地板n)
用于舍入元素的数量。如果n为零或为负,则返回一个空的1x0矩阵。
y=
logspace (a,b)
¶
y=
logspace (a,b,n)
¶
y=
logspace (a,pi)
¶
y=
logspace (a,pi,n)
¶
返回带有的行向量n对数间隔为10的元素^a至10^b.
如果元素的数量n未指定,则默认为50。
如果b等于topi,点在10之间^a以及pi,不10^a和10^pi,这在数字信号处理中是有用的。
编程说明:为了与兼容MATLAB,返回范围的右手侧(10^b)当单个值(n=1)。如果n不是整数,则地板n)
用于对元素的数量进行舍入。如果n为零或为负,则返回一个空的1x0matrix。
详见: linspace.
x=
rand (n)
¶
x=
rand (m,n, …)
¶
x=
rand ([m n…])
¶
x=
rand single
¶
x=
rand double
¶
v=
rand 状态
¶
状态v)
¶
(“状态”、“重置”)
¶
v=
rand 种子
¶
种子v)
¶
(“种子”、“重置”)
¶
返回一个随机元素均匀分布在区间(0,1)上的矩阵。
参数的处理方式与的参数相同eye
.
您可以使用以下表单查询随机数生成器的状态
v = rand ("state")
这将返回一个列向量v长度625。稍后,您可以将随机数生成器恢复到状态v使用表单
rand ("state", v)
您也可以从长度≤625的任意向量初始化状态向量v。此新状态将是基于的值的哈希v不v它本身
默认情况下,生成器是通过从全局时钟时间、CPU时间、当前秒数、进程ID以及C++随机数源的1024位(如果可用)中贡献熵来初始化的random_device
,这可能是不确定性的(具体实现)。请注意,这与MATLAB,它总是在启动时将状态初始化为相同的状态。为了获得与相当的行为MATLAB,在Octave的启动文件中使用确定性状态向量进行初始化(详见启动文件).
为了计算伪随机序列,rand
使用MersenneTwister,周期为2.{19937}-1(详见M.Matsumoto和T.Nishimura,Mersenne Twister:一个623维等分布均匀伪随机数发生器,ACM Trans。《建模与计算机模拟》第8卷第1期,第3–30页,1998年1月,http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html).做不用于密码学,而无需将几个返回的值安全地散列在一起,否则可以在读取624个连续值后学习生成器状态。
旧版本的Octave使用了不同的随机数生成器。默认情况下使用新生成器,因为它比旧生成器快得多,并且生成循环时间长得多的随机数。然而,在某些情况下,可能希望获得与旧生成器生成的随机序列相同的随机序列。要执行此操作,请使用关键字"seed"
用于指定应使用旧生成器,如中所示
rand ("seed", val)
将生成器的种子设置为val。可以使用查询生成器的种子
s = rand ("seed")
但是,需要注意的是,查询种子不会导致rand
要使用旧的生成器,只需设置种子即可。造成rand
要再次使用新生成器,关键字"state"
应用于重置的状态rand
.
生成器的状态或种子可以使用重置为新的随机值"reset"
关键字。
返回的值的类可以从尾部控制"double"
或"single"
参数这些是唯一有效的类别。
R=
randi (imax)
¶
R=
randi (imax,n)
¶
R=
randi (imax,m,n, …)
¶
R=
randi ([imin imax], …)
¶
R=
randi (…, "class")
¶
返回范围为1:imax.
其他参数决定返回矩阵的形状。如果未指定参数,则返回一个随机整数。如果有一个参数n则指定一个方阵(nxn) 返回。两个或多个参数将返回多维矩阵(mxnx…) .
整数范围可以选择性地从具有下界和上界的双元素矩阵来描述,在这种情况下,返回的整数将在区间上[imin,imax] .
可选参数class将返回所指定类型的矩阵。默认为"double"
.
以下示例返回150个介于1–10之间的整数。
ri = randi (10, 150, 1)
支持说明:randi
内部依赖rand
它使用类"double"
以表示数字。这限制了最大值(imax)和范围(imax-imin)返回的值flintmax
作用对于IEEE浮点数,此值为2^{53} - 1 .
x=
randn (n)
¶
x=
randn (m,n, …)
¶
x=
randn ([m n…])
¶
x=
randn single
¶
x=
randn double
¶
v=
randn 状态
¶
状态v)
¶
(“状态”、“重置”)
¶
v=
randn 种子
¶
种子v)
¶
(“种子”、“重置”)
¶
返回一个矩阵,该矩阵具有均值为零、方差为一的正态分布随机元素。
参数的处理方式与的参数相同rand
.
默认情况下,randn
使用Marsaglia和Tsang的“Ziggurat技术”将均匀分布转化为正态分布。
返回的值的类可以从尾部控制"double"
或"single"
参数这些是唯一有效的类别。
参考文献:G.Marsaglia和W.W.Tsang,生成随机变量的Ziggurat方法J统计软件,2000年第5卷,https://www.jstatsoft.org/v05/i08/
x=
rande (n)
¶
x=
rande (m,n, …)
¶
x=
rande ([m n…])
¶
x=
rande single
¶
x=
rande double
¶
v=
rande 状态
¶
状态v)
¶
(“状态”、“重置”)
¶
v=
rande 种子
¶
种子v)
¶
(“种子”、“重置”)
¶
返回一个具有指数分布随机元素的矩阵。
参数的处理方式与的参数相同rand
.
默认情况下,rande
使用Marsaglia和Tsang的“Ziggurat技术”将均匀分布转化为指数分布。
返回的值的类可以从尾部控制"double"
或"single"
参数这些是唯一有效的类别。
参考文献:G.Marsaglia和W.W.Tsang,生成随机变量的Ziggurat方法J统计软件,2000年第5卷,https://www.jstatsoft.org/v05/i08/
x=
randp (l,n)
¶
x=
randp (l,m,n, …)
¶
x=
randp (l, [m n…])
¶
x=
randp single
¶
x=
randp double
¶
v=
randp 状态
¶
状态v)
¶
(“状态”、“重置”)
¶
v=
randp 种子
¶
种子v)
¶
(“种子”、“重置”)
¶
返回一个具有泊松分布随机元素的矩阵,其均值参数从第一个自变量给出,l.
参数的处理方式与的参数相同rand
,参数除外l.
根据的范围,使用了五种不同的算法l以及是否l是标量或矩阵。
W.H.Press等。,英文的,剑桥大学出版社,1992年。
W.H.Press等。,英文的,剑桥大学出版社,1992年。
E.Stadlober等人,WinRand源代码,可通过FTP获得。
E.Stadlober等人,WinRand源代码,可通过FTP或H.Zechner获得,连续和离散单峰分布的有效采样,博士论文,156页。,奥地利格拉茨技术大学,1994年。
L.Montanet等人。,颗粒性质综述,《物理注释》D 50第284页,1994年。
返回的值的类可以从尾部控制"double"
或"single"
参数这些是唯一有效的类别。
x=
randg (a,n)
¶
x=
randg (a,m,n, …)
¶
x=
randg (a, [m n…])
¶
x=
randg single
¶
x=
randg double
¶
v=
randg 状态
¶
状态v)
¶
(“状态”、“重置”)
¶
v=
randg 种子
¶
种子v)
¶
(“种子”、“重置”)
¶
返回一个矩阵伽玛(a1.
分布式随机元素。
参数的处理方式与的参数相同rand
,参数除外a.
这可以用于生成许多分布:
gamma (a, b)
对于a > -1
,b > 0
r = b * randg (a)
beta (a, b)
对于a > -1
,b > -1
r1 = randg (a, 1) r = r1 / (r1 + randg (b, 1))
Erlang (a, n)
r = a * randg (n)
chisq (df)
对于df > 0
r = 2 * randg (df / 2)
t (df)
对于0 < df < inf
(如果df是无限的,则使用randn)r = randn () / sqrt (2 * randg (df / 2) / df)
F (n1, n2)
对于0 < n1
,0 < n2
## r1 equals 1 if n1 is infinite r1 = 2 * randg (n1 / 2) / n1 ## r2 equals 1 if n2 is infinite r2 = 2 * randg (n2 / 2) / n2 r = r1 / r2
binomial (n, p)
对于n > 0
,0 < p <= 1
r = randp ((1 - p) / p * randg (n))
chisq (df, L)
对于df >= 0
和L > 0
(如果L = 0
)
r = randp (L / 2) r(r > 0) = 2 * randg (r(r > 0)) r(df > 0) += 2 * randg (df(df > 0)/2)
Dirichlet (a1, … ak)
r = (randg (a1), ..., randg (ak)) r = r / sum (r)
返回的值的类可以从尾部控制"double"
或"single"
参数这些是唯一有效的类别。
(seed)
¶
(seed, "generator")
¶
洗牌
¶
洗牌generator")
¶
默认
¶
s=
rng ()
¶
(s)
¶
s=
rng (…)
¶
设置或查询从使用的随机数生成器的种子rand
和randn
.
输入seed是一个标量数值,用于初始化随机数生成器的状态向量。
可选字符串generator指定要使用的随机数生成器的类型。其值可以是"twister"
,"v5uniform"
或"v5normal"
这个"twister"
关键字描述如下。"v5uniform"
和"v5normal"
详见曾使用不同随机数生成器的Octave工具版本。
可以使用将随机数生成器的状态或种子重置为新的随机值"shuffle"
关键字。
可以使用将随机数生成器重置为默认值"default"
关键字。默认值是使用种子为0的MersenneTwister生成器。
可选返回值s包含调用函数时(即,根据输入参数对其进行修改之前)随机数生成器的状态。它被编码为具有三个字段的结构体变量:"Type"
,"Seed"
和"State"
。随机数生成器可以恢复到状态s使用rng(s)
当算法需要伪随机数的同一序列时,这是有用的。
默认情况下,使用"twister"
参数,伪随机序列使用Mersenne Twister计算,周期为2.{19937}-1(详见M.Matsumoto和T.Nishimura,Mersenne Twister:一个623维等分布均匀伪随机数发生器,ACM Trans。《建模与计算机模拟》第8卷第1期,第3–30页,1998年1月,http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html).做不用于密码学,而无需将几个返回的值安全地散列在一起,否则可以在读取624个连续值后学习生成器状态。
发电机以新的或旧的方式一起运行,两者不可能混合使用。使用初始化任何生成器"state"
或"seed"
导致其他人切换到相同的风格以备将来调用。
每个生成器的状态是独立的,对不同生成器的调用可以交错进行,而不会影响最终结果。例如,
rand ("state", [11, 22, 33]); randn ("state", [44, 55, 66]); u = rand (100, 1); n = randn (100, 1);
和
rand ("state", [11, 22, 33]); randn ("state", [44, 55, 66]); u = zeros (100, 1); n = zeros (100, 1); for i = 1:100 u(i) = rand (); n(i) = randn (); end
返回等效的结果。当生成器以旧样式初始化时"seed"
只有rand
和randn
独立,因为旧rande
,randg
和randp
生成器调用rand
和randn
.
生成器在启动时使用随机状态进行初始化,因此每次运行Octave时随机数的序列并不相同。7如果你真的想精确地复制一个数字序列,你可以将状态或种子设置为一个特定的值。
如果在没有自变量的情况下调用,rand
和randn
返回随机序列中的一个元素。
原件rand
和randn
函数使用的Fortran代码来自兰利卜,一个用于随机数生成的Fortran子程序库,从德克萨斯大学癌症中心癌症医学博士Barry W.Brown和James Lovato编辑,休斯敦,TX 77030。
v=
randperm (n)
¶
v=
randperm (n,m)
¶
返回包含的随机排列的行向量1.n
.
如果m已提供,返回m唯一条目,采样时不替换1.n
.
复杂性为O(n)在内存和O中(m)及时,除非m<n/5,在这种情况下O(m)内存也被使用了。使用rand()执行随机化。所有排列的可能性都相等。
详见: perms.
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2