I = eye () ¶I = eye (n) ¶I = eye (m, n) ¶I = eye ([m, n]) ¶I = eye (…, class) ¶返回一个单位矩阵。
如果不带参数调用,返回标量值1.
如果带一个标量参数n调用,返回一个NxN的单位矩阵。
如果带两个参数(m, n), 或一个2元素向量
[m, n]调用,
返回一个MxN的单位矩阵,其中m是行数,n是列数。
可选参数class指定了返回矩阵的类型,默认为"double".
例子 1 : 1输入,单位方阵
eye (3)
⇒ 1 0 0
0 1 0
0 0 1
例子 2 : 以下表达式都会返回2x2单位矩阵
eye (2) ≡ eye (2, 2) ≡ eye (size ([1, 2; 3, 4]))
⇒ 1 0
0 1
例子 3 : 2x2 uint8 单位矩阵
I = eye (2, "uint8")
编程注意:不带参数调用eye等价于带参数1调用。
任何负维度都被视为零。这些奇怪的定义是为了与MATLAB兼容。
x = ones () ¶x = ones (n) ¶x = ones (m, n, …) ¶x = ones ([m, n, …]) ¶x = ones (…, class) ¶x = ones (…, "like", var) ¶返回一个标量,矩阵或N维数组,其元素均为
1.
如果不带参数调用,返回标量值1.
如果使用单个标量整数参数n调用,返回一个NxN方阵。
如果使用两个或多个标量整数参数或整数向量调用,则返回具有给定维度的数组。
可选参数class指定返回数组的类,默认为"double".
如果变量var在之后指定"like",输出val将具有与相同的数据类型、复杂度和稀疏性var.
例子 1 : MxN 矩阵,元素值为val
C = val * ones (m, n)
例子 2 : MxN 矩阵,元素为 uint8
C = ones (m, n, "uint8")
编程注意:任何负数维度都被视为零,任何零维度将导致一个空矩阵。这些奇怪的定义是为了与MATLAB兼容。
x = zeros () ¶x = zeros (n) ¶x = zeros (m, n, …) ¶x = zeros ([m, n, …]) ¶x = zeros (…, class) ¶x = zeros (…, "like", var) ¶返回一个标量,矩阵或N维数组,其元素均为
0.
如果不带参数调用,返回标量值0.
如果使用单个标量整数参数n调用,返回一个NxN方阵。
如果使用两个或多个标量整数参数或整数向量调用,则返回具有给定维度的数组。
可选参数class指定返回数组的类,默认为"double".
如果变量var在之后指定"like",输出val将具有与相同的数据类型、复杂度和稀疏性var.
例子 : MxN的uint8矩阵
C = ones (m, n, "uint8")
编程说明:任何负数维度都被视为零,任何零维度将导致一个空矩阵。这些奇怪的定义是为了与MATLAB兼容。
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 = []; for i = 1:columns (r) y = [y, x(r(1,i)*ones(1, r(2,i)))]; endfor
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不是整数,则floor (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不是整数,则floor (n)用于对元素的数量进行舍入。如果n为零或为负,则返回一个空的1x0matrix。
详见: linspace.
x = rand () ¶x = rand (n) ¶x = rand (m, n, …) ¶x = rand ([m, n, …]) ¶x = rand (…, class) ¶v = rand ("state") ¶("state", v) ¶("state", "reset") ¶v = rand ("seed") ¶("seed", v) ¶("seed", "reset") ¶返回一个标量、矩阵或N维数组,其元素是均匀分布在区间(0, 1)上的随机数。
如果不带参数调用,返回一个标量随机值。
如果只带一个标量整数参数n调用,则返回一个NxN方阵。
如果以两个或多个标量整数参数调用,或以整数向量调用,则返回一个具有给定维度的数组。
可选参数 class 指定返回数组的类。有效的选项只有 "double" (默认) 或 "single"。
编程说明:任何负维度都被视为零,任何零维度将导致一个空矩阵。这种奇怪的行为是为了兼容 MATLAB。
其他的调用形式提供了一个接口到基础随机数生成器。
您可以使用以下形式查询随机数生成器的状态
v = rand ("state")
这将返回一个列向量v长度625。稍后,您可以将随机数生成器恢复到状态v使用形式
rand ("state", v)
您也可以从长度≤625的任意向量初始化状态向量v。此新状态将是基于的值的哈希v不v它本身
默认情况下,生成器是通过从全局时钟时间、CPU时间、当前秒数、进程ID以及C++随机数源的1024位(如果可用)中贡献熵来初始化的random_device,这可能是不确定性的(具体实现)。
请注意,这与MATLAB不同,
其总是在启动时初始化随机数生成器到相同的状态。要获得与MATLAB类似的行为,
请在Octave的启动文件中使用确定的状态向量进行初始化(详见Startup Files)。
编程说明:为了计算伪随机数,rand使用梅森旋转器,其周期为2^{19937}-1。
(详见
M. Matsumoto and T. Nishimura, "Mersenne Twister: A
623-dimensionally equidistributed uniform pseudorandom number generator",
ACM Trans. on Modeling and Computer Simulation,
Vol. 8, No. 1, pp. 3–30, January 1998,
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"关键字。
R = randi (imax) ¶R = randi (imax, n) ¶R = randi (imax, m, n, …) ¶R = randi (imax, [m, n, …]) ¶R = randi ([imin, imax], …) ¶R = randi (…, "class") ¶返回一个标量、矩阵或N维数组,其元素在区间[1, imax]当中.
如果不带参数调用,返回一个标量随机值。
如果只带一个标量整数参数n调用,则返回一个NxN方阵。
如果以两个或多个标量整数参数调用,或以整数向量调用,则返回一个具有给定维度的数组。
整数范围可以选择性地从具有下界和上界的双元素矩阵来描述,在这种情况下,返回的整数将在区间上[imin,imax] .
可选参数class将返回对应类型的矩阵。默认是"double".
支持的类是: "double",
"single", "int8", "int16", "int32",
"uint8", "uint16", "uint32", 和 "logical".
编程说明:randi依赖于内部rand,
其使用"double"类型来表示数字。这限制了由flintmax函数返回的最大值(imax)和范围(imax-imin)。
对于IEEE 754浮点数,此值为2^{53} - 1。
当输出的类型是"logical"时,函数构造一个指定随机整数数组,并且应用测试
x > 0
来确定哪些元素将为真。因为函数的单输入参数形式使用
1用于imin,所以randi
将始终返回一个全为1的矩阵。
例子: 150个整数,范围在1–10之间.
ri = randi (10, 150, 1)
x = randn () ¶x = randn (n) ¶x = randn (m, n, …) ¶x = randn ([m, n, …]) ¶x = randn (…, class) ¶v = randn ("state") ¶("state", v) ¶("state", "reset") ¶v = randn ("seed") ¶("seed", v) ¶("seed", "reset") ¶返回一个标量、矩阵或N维数组,其元素来自标准正态分布,均值为0,方差为1。
如果不带参数调用,返回一个标量随机值。
如果只带一个标量整数参数n调用,则返回一个NxN方阵。
如果以两个或多个标量整数参数调用,或以整数向量调用,则返回一个具有给定维度的数组。
可选参数class将返回对应类型的矩阵。支持的类是"double" (default)或"single".
编程注意:任何负尺寸都被视为零,任何零维度都将导致空矩阵。这种奇怪的行为是为了与MATLAB兼容。
额外的调用形式提供了对底层随机数生成器的接口。详见rand
文档关于查询和控制随机数生成器的说明。
编程注意:默认地,randn使用Marsaglia和Tsang的“Ziggurat技术”将均匀分布转换为正态分布。
参考文献: G. Marsaglia and W.W. Tsang, "Ziggurat Method for Generating Random Variables", J. Statistical Software, Vol. 5, 2000, https://www.jstatsoft.org/v05/i08/
x = rande () ¶x = rande (n) ¶x = rande (m, n, …) ¶x = rande ([m, n, …]) ¶x = rande (…, class) ¶v = rande ("state") ¶("state", v) ¶("state", "reset") ¶v = rande ("seed") ¶("seed", v) ¶("seed", "reset") ¶返回一个标量、矩阵或N维数组,其元素来自指数分布,均值为0.
如果不带参数调用,返回一个标量随机值。
如果只带一个标量整数参数n调用,则返回一个NxN方阵。
如果以两个或多个标量整数参数调用,或以整数向量调用,则返回一个具有给定维度的数组。
可选参数class将返回对应类型的矩阵。支持的类是"double" (default)或"single".
编程注意: 任何负尺寸都被视为零,任何零维度都将导致空矩阵。这种奇怪的行为是为了与MATLAB兼容。
其他的调用形式提供了对底层随机数生成器的接口。详见rand
文档关于查询和控制随机数生成器的说明。
编程注意:默认地,rande使用Marsaglia和Tsang的“Ziggurat技术”将均匀分布转换为指数分布。
参考文献: G. Marsaglia and W.W. Tsang, "Ziggurat Method for Generating Random Variables", J. Statistical Software, Vol 5, 2000, https://www.jstatsoft.org/v05/i08/
x = randp (l) ¶x = randp (l, n) ¶x = randp (l, m, n, …) ¶x = randp (l, [m, n, …]) ¶x = randp (…, class) ¶v = randp ("state") ¶("state", v) ¶("state", "reset") ¶v = randp ("seed") ¶("seed", v) ¶("seed", "reset") ¶返回一个标量、矩阵或N维数组,其元素来自泊松分布,均值为l.
如果不带参数调用,返回一个标量随机值。
如果只带一个标量整数参数n调用,则返回一个NxN方阵。
如果以两个或多个标量整数参数调用,或以整数向量调用,则返回一个具有给定维度的数组。
可选参数class将返回对应类型的矩阵。支持的类是"double" (default)或"single".
编程注意:任何负尺寸都被视为零,任何零维度都将导致空矩阵。这种奇怪的行为是为了与MATLAB兼容。
额外的调用形式提供了对底层随机数生成器的接口。详见rand
文档关于查询和控制随机数生成器的说明。
编程注意:根据l的范围和l是不是标量或矩阵使用五个不同的算法。
W.H. Press, et al., Numerical Recipes in C, Cambridge University Press, 1992.
W.H. Press, et al., Numerical Recipes in C, Cambridge University Press, 1992.
E. Stadlober, et al., WinRand source code, available via FTP.
E. Stadlober, et al., WinRand source code, available via FTP, or H. Zechner, Efficient sampling from continuous and discrete unimodal distributions, Doctoral Dissertation, pp. 156, Technical University Graz, Austria, 1994.
L. Montanet, et al., "Review of Particle Properties", Physical Review D, 50, p. 1284, 1994.
x = randg (a) ¶x = randg (a, n) ¶x = randg (a, m, n, …) ¶x = randg (a, [m, n, …]) ¶x = randg (…, class) ¶v = randg ("state") ¶("state", v) ¶("state", "reset") ¶v = randg ("seed") ¶("seed", v) ¶("seed", "reset") ¶返回一个标量、矩阵或N维数组,其元素服从伽马分布gamma (a,1).
如果不带参数调用,返回一个标量随机值。
如果只带一个标量整数参数n调用,则返回一个NxN方阵。
如果以两个或多个标量整数参数调用,或以整数向量调用,则返回一个具有给定维度的数组。
可选参数class将返回对应类型的矩阵。支持的类是"double" (default)或"single".
编程注意:任何负尺寸都被视为零,任何零维度都将导致空矩阵。这种奇怪的行为是为了与MATLAB兼容。
额外的调用形式提供了对底层随机数生成器的接口。详见rand
文档关于查询和控制随机数生成器的说明。
编程注意:伽马分布可用于生成许多其他分布:
gamma (a, b) for a > -1, b > 0r = b * randg (a)
beta (a, b) for a > -1, b > -1r1 = randg (a, 1) r = r1 / (r1 + randg (b, 1))
Erlang (a, n)r = a * randg (n)
chisq (df) for df > 0r = 2 * randg (df / 2)
t (df) for 0 < df < inf (use randn if df is infinite)r = randn () / sqrt (2 * randg (df / 2) / df)
F (n1, n2) for 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) for n > 0, 0 < p <= 1r = randp ((1 - p) / p * randg (n))
chisq (df, L), for df >= 0 and 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)
(seed) ¶(seed, "generator") ¶("shuffle") ¶("shuffle", "generator") ¶("default") ¶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 and T. Nishimura, "Mersenne Twister: A
623-dimensionally equidistributed uniform pseudorandom number generator",
ACM Trans. on Modeling and Computer Simulation,
Vol. 8, No. 1, pp. 3–30, January 1998,
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。
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2