16.3特别的工具矩阵

 
:= eye (n)
:= eye (m,n)
:= eye ([m n])
:= eye (…,)

返回一个单位矩阵。

如果使用单个标量参数调用n,返回一个squareNxN标识矩阵。

如果提供两个标量参数(m,n),eye取them为行数和列数。如果给定具有两个元素的向量,eye分别使用元素的值作为行数和列数。例如

eye(3)⇒  1  0  0     0  1  0     0  0  1

以下表达式都会返回相同的结果:

eye(2)lecteye(2,2)Selecteye(大小([1,2;3,4]))

可选参数,允许eye返回指定类型的数组,如

val=零(n,m,“uint8”)

使命感eye不带参数相当于用参数1调用它。任何负尺寸都视为零。这些奇怪的定义是为了与兼容MATLAB.

详见: speye,,.

 
:val= (n)
:val= (m,n)
:val= (m,n,k, …)
:val= ([m n…])
:val= 喜欢var)
:val= (…,)

返回元素均为1的矩阵或N维数组。

如果使用单个标量整数参数调用n,返回一个squareNxN矩阵。

如果使用两个或多个标量整数参数或整数向量调用,则返回具有给定维度的数组。

要创建值相同的常量矩阵,请使用以下表达式

val_matrix=val*ones(m,n)

如果变量var在之后指定喜欢,输出val将具有与相同的数据类型、复杂性和稀疏性var.

可选参数指定返回数组的类,默认为double。例如

val=个(m,n,“uint8”)

详见: .

 
:val= (n)
:val= (m,n)
:val= (m,n,k, …)
:val= ([m n…])
:val= 喜欢var)
:val= (…,)

返回元素均为0的矩阵或N维数组。

如果使用单个标量整数参数调用,则返回一个squareNxN矩阵。

如果使用两个或多个标量整数参数或整数向量调用,则返回具有给定维度的数组。

如果变量var在之后指定喜欢,输出val将具有与相同的数据类型、复杂性和稀疏性var.

可选参数指定返回数组的类,默认为double。例如

val=零(m,n,“uint8”)

详见: .

 
: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数组。

形成大小的块矩阵m通过n,带有矩阵的副本A作为每个元件。

如果n未指定,形成m通过m块矩阵。如果沿两个以上维度进行复制,请指定跨每个维度进行复制的次数m,n,</p>,…,在第二个自变量的向量中。

详见: bsxfun,克朗,排斥.

 
:y= 排斥 (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))];外循环

详见: repmat,.

 
:xxx= 排斥 (x,R)
:xxx= 排斥 (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是标量或向量,那么排斥只需一条重复指令即可调用R排斥将返回与输入方向相同的向量。

如果x是一个矩阵,那么至少有两个R_j必须指定s。

注意:使用排斥带有向量x和的向量R_j相当于游程长度解码。

示例:

A=[1 2 3 4 5];B=[2 1 0 1 2];排斥(A,B)⇒   1   1   2   4   5   5
A=魔术(3)⇒ A=8 1 6 3 5 7 4 9 2B1=[1 2 3];B2=2;排斥(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;排斥(A、B1、B2、B3)⇒    ans(:,:,1)=1 1 2 3 3 5 5 1 1 2 2 3 3 3 5 ans(,:,2)=1 12 3 3 5 1 2 3 5 5 ans

R_j必须按顺序指定。占位符1可以用于不需要复制的维度。

排斥([-1,0;0,1],1,2,1,2)⇒  ans(:,:,1,1)=-1-1 0 0 0 1 1 ans(,:,1,2)=-1-1 0 0 0 0

如果更少R_j给定的维数大于中的维数x,排斥将假定R_j对于这些尺寸为1。

A=猫(3,[-10;0 1],[-1 0;0 1])⇒  ans(:,:,1)=-1 0 0 1 ans(,:,2)=-1 10 0 1 repelem(A,2,3)⇒  ans(:,:,1)=-1-1-1 0 0-1-1 0 0 0 0 1 1 1 ans(,:,2)=-1-1 0 0-1-1 0-1 0-1 1 0 0 0

排斥保留的类x,并与字符串、元胞数组、NA和NAN输入一起工作。如果有R_j如果为0,则输出将为空数组。

排斥(“octave”,2,3)⇒    OOOcctttaaavveeeOOOcctattaavveeerepelem([1 2 3;1 2 3],2,0)⇒    [](4x0)

详见: ,克朗,repmat.

函数linspace对数空间使创建具有均匀或对数间隔元素的向量变得非常容易。详见范围.

 
:y= linspace (开始,终止)
:y= linspace (开始,终止,n)

返回带有的行向量n之间的线性间隔元件开始终止.

如果元素的数量n大于1,则端点开始终止总是包含在范围内。如果开始大于终止,元素按递减顺序存储。如果,则点数n则使用值100。

这个linspace当两者都存在时,函数返回一个行向量开始终止是标量。如果一个或两个输入都是向量,那么linspace将它们转换为列向量,并返回一个矩阵,其中每行是之间的独立序列开始(行_n),终止(行_n).

编程说明:为了与兼容MATLAB,返回第二个参数(终止)当单个值(n=1)。如果n不是整数,则地板n)用于舍入元素的数量。如果n为零或为负,则返回一个空的1x0矩阵。

详见: 冒号,对数空间.

 
:y= 对数空间 (a,b)
:y= 对数空间 (a,b,n)
:y= 对数空间 (a,pi)
:y= 对数空间 (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= 兰特 (n)
:x= 兰特 (m,n, …)
:x= 兰特 ([m n…])
:x= 兰特 single
:x= 兰特 double
:v= 兰特 状态
:兰特 状态v)
:兰特 (“状态”、“重置”)
:v= 兰特 种子
:兰特 种子v)
:兰特 (“种子”、“重置”)

返回一个随机元素均匀分布在区间(0,1)上的矩阵。

参数的处理方式与的参数相同eye.

您可以使用以下表单查询随机数生成器的状态

v=兰特(“状态”)

这将返回一个列向量v长度625。稍后,您可以将随机数生成器恢复到状态v使用表单

rand(“状态”,v)

您也可以从长度≤625的任意向量初始化状态向量v。此新状态将是基于的值的哈希vv它本身

默认情况下,生成器是通过从全局时钟时间、CPU时间、当前秒数、进程ID以及C++随机数源的1024位(如果可用)中贡献熵来初始化的随机设备,这可能是不确定性的(具体实现)。请注意,这与MATLAB,它总是在启动时将状态初始化为相同的状态。为了获得与相当的行为MATLAB,在Octave的启动文件中使用确定性状态向量进行初始化(详见启动文件).

为了计算伪随机序列,兰特使用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使用了不同的随机数生成器。默认情况下使用新生成器,因为它比旧生成器快得多,并且生成循环时间长得多的随机数。然而,在某些情况下,可能希望获得与旧生成器生成的随机序列相同的随机序列。要执行此操作,请使用关键字种子用于指定应使用旧生成器,如中所示

rand(“种子”,val)

将生成器的种子设置为val。可以使用查询生成器的种子

s=兰特(“种子”)

但是,需要注意的是,查询种子不会导致兰特要使用旧的生成器,只需设置种子即可。造成兰特要再次使用新生成器,关键字状态应用于重置的状态兰特.

生成器的状态或种子可以使用重置为新的随机值“重置”关键字。

返回的值的类可以从尾部控制doublesingle参数这些是唯一有效的类别。

详见: randn,rande,randg,randp.

 
:R= 兰迪 (imax)
:R= 兰迪 (imax,n)
:R= 兰迪 (imax,m,n, …)
:R= 兰迪 ([亚胺 imax], …)
:R= 兰迪 (…, "")

返回范围为1:imax.

其他参数决定返回矩阵的形状。如果未指定参数,则返回一个随机整数。如果有一个参数n则指定一个方阵(nxn)返回。两个或多个参数将返回多维矩阵(mxnx…).

整数范围可以选择性地从具有下界和上界的双元素矩阵来描述,在这种情况下,返回的整数将在区间上[亚胺,imax].

可选参数将返回所指定类型的矩阵。默认为double.

以下示例返回150个介于1–10之间的整数。

ri=兰迪(10,150,1)

实施说明:兰迪内部依赖兰特它使用类double以表示数字。这限制了最大值(imax)和范围(imax-亚胺)返回的值燧石作用对于IEEE浮点数,此值为2^{53} - 1.

详见: 兰特,randn.

 
:x= randn (n)
:x= randn (m,n, …)
:x= randn ([m n…])
:x= randn single
:x= randn double
:v= randn 状态
:randn 状态v)
:randn (“状态”、“重置”)
:v= randn 种子
:randn 种子v)
:randn (“种子”、“重置”)

返回一个矩阵,该矩阵具有均值为零、方差为一的正态分布随机元素。

参数的处理方式与的参数相同兰特.

默认情况下,randn使用Marsaglia和Tsang的“Ziggurat技术”将均匀分布转化为正态分布。

返回的值的类可以从尾部控制doublesingle参数这些是唯一有效的类别。

参考文献:G.Marsaglia和W.W.Tsang,生成随机变量的Ziggurat方法J统计软件,2000年第5卷,https://www.jstatsoft.org/v05/i08/

详见: 兰特,rande,randg,randp.

 
:x= rande (n)
:x= rande (m,n, …)
:x= rande ([m n…])
:x= rande single
:x= rande double
:v= rande 状态
:rande 状态v)
:rande (“状态”、“重置”)
:v= rande 种子
:rande 种子v)
:rande (“种子”、“重置”)

返回一个具有指数分布随机元素的矩阵。

参数的处理方式与的参数相同兰特.

默认情况下,rande使用Marsaglia和Tsang的“Ziggurat技术”将均匀分布转化为指数分布。

返回的值的类可以从尾部控制doublesingle参数这些是唯一有效的类别。

参考文献:G.Marsaglia和W.W.Tsang,生成随机变量的Ziggurat方法J统计软件,2000年第5卷,https://www.jstatsoft.org/v05/i08/

详见: 兰特,randn,randg,randp.

 
:x= randp (l,n)
:x= randp (l,m,n, …)
:x= randp (l, [m n…])
:x= randp single
:x= randp double
:v= randp 状态
:randp 状态v)
:randp (“状态”、“重置”)
:v= randp 种子
:randp 种子v)
:randp (“种子”、“重置”)

返回一个具有泊松分布随机元素的矩阵,其均值参数从第一个自变量给出,l.

参数的处理方式与的参数相同兰特,参数除外l.

根据的范围,使用了五种不同的算法l以及是否l是标量或矩阵。

对于标量l≤12,采用直接法。

W.H.Press等。,英文的,剑桥大学出版社,1992年。

对于标量l>12、采用拒收方法。1.

W.H.Press等。,英文的,剑桥大学出版社,1992年。

对于矩阵l≤10,采用反演方法。2.

E.Stadlober等人,WinRand源代码,可通过FTP获得。

对于矩阵l>10、采用拼凑拒绝的方法。

E.Stadlober等人,WinRand源代码,可通过FTP或H.Zechner获得,连续和离散单峰分布的有效采样,博士论文,156页。,奥地利格拉茨技术大学,1994年。

对于l>1e8,使用法线近似。

L.Montanet等人。,颗粒性质综述,《物理注释》D 50第284页,1994年。

返回的值的类可以从尾部控制doublesingle参数这些是唯一有效的类别。

详见: 兰特,randn,rande,randg.

 
:x= randg (a,n)
:x= randg (a,m,n, …)
:x= randg (a, [m n…])
:x= randg single
:x= randg double
:v= randg 状态
:randg 状态v)
:randg (“状态”、“重置”)
:v= randg 种子
:randg 种子v)
:randg (“种子”、“重置”)

返回一个矩阵伽玛(a1.分布式随机元素。

参数的处理方式与的参数相同兰特,参数除外a.

这可以用于生成许多分布:

伽玛(a,b)对于a>-1,b>0
r=b*randg(a)
β(a,b)对于a>-1,b>-1
r1=randg(a,1)r=r1/(r1+randg(b,1))
二郎(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
##如果n1无穷大,r1等于1 1=2*randg(n1/2)/n1##n2无穷大,r2等于1 2=2*randg(n2/2)/n2r=r1/r2
消极的二项式(n,p)对于n>0,0<p<=1
r=randp((1-p)/p*randg(n))
非中心chisq(df,L)对于df>=0L>0

(如果L=0)

r=randp(L/2)r(r>0)=2*randg(r(r>0))r(df>0)+=2*randg(df(df>0)/2)
狄利克雷(a1,…ak)
r=(randg(a1)。。。,randg(ak))r=r/sum(r)

返回的值的类可以从尾部控制doublesingle参数这些是唯一有效的类别。

详见: 兰特,randn,rande,randp.

 
:rng (种子)
:rng (种子, "发电机")
:rng 洗牌
:rng 洗牌发电机")
:rng 默认
:s= rng ()
:rng (s)
:s= rng (…)

设置或查询从使用的随机数生成器的种子兰特randn.

输入种子是一个标量数值,用于初始化随机数生成器的状态向量。

可选字符串发电机指定要使用的随机数生成器的类型。其值可以是“龙卷风”,“v5uniform”“v5normal”这个“龙卷风”关键字描述如下。“v5uniform”“v5normal”详见曾使用不同随机数生成器的Octave工具版本。

可以使用将随机数生成器的状态或种子重置为新的随机值洗牌关键字。

可以使用将随机数生成器重置为默认值默认关键字。默认值是使用种子为0的MersenneTwister生成器。

可选返回值s包含调用函数时(即,根据输入参数对其进行修改之前)随机数生成器的状态。它被编码为具有三个字段的结构体变量:类型,种子状态。随机数生成器可以恢复到状态s使用rng(s)当算法需要伪随机数的同一序列时,这是有用的。

默认情况下,使用“龙卷风”参数,伪随机序列使用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个连续值后学习生成器状态。

详见: 兰特,randn.

发电机以新的或旧的方式一起运行,两者不可能混合使用。使用初始化任何生成器状态种子导致其他人切换到相同的风格以备将来调用。

每个生成器的状态是独立的,对不同生成器的调用可以交错进行,而不会影响最终结果。例如,

兰特(“国家”,[11,22,33]);randn(“状态”,[44,55,66]);u=兰特(100,1);n=randn(100,1);

兰特(“国家”,[11,22,33]);randn(“状态”,[44,55,66]);u=零(100,1);n=零(100,1);对于i=1:100 u(i)=兰特();n(i)=randn();终止

返回等效的结果。当生成器以旧样式初始化时种子只有兰特randn独立,因为旧rande,randgrandp生成器调用兰特randn.

生成器在启动时使用随机状态进行初始化,因此每次运行Octave时随机数的序列并不相同。7如果你真的想精确地复制一个数字序列,你可以将状态或种子设置为一个特定的值。

如果在没有自变量的情况下调用,兰特randn返回随机序列中的一个元素。

原件兰特randn函数使用的Fortran代码来自兰利卜,一个用于随机数生成的Fortran子程序库,从德克萨斯大学癌症中心癌症医学博士Barry W.Brown和James Lovato编辑,休斯敦,TX 77030。

 
:v= 随机排列 (n)
:v= 随机排列 (n,m)

返回包含的随机排列的行向量1.n.

如果m已提供,返回m唯一条目,采样时不替换1.n.

复杂性为O(n)在内存和O中(m)及时,除非m<n/5,在这种情况下O(m)内存也被使用了。使用rand()执行随机化。所有排列的可能性都相等。

详见: 排列.


脚注

7.

的旧版本兰特randn从系统时钟中获得它们的初始种子。


版权所有 © 2024 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号