16.2重新排列矩阵

 
: B = fliplr (A)

将数组从左向右翻转。

返回的副本A其中列的顺序颠倒。换句话说,A围绕垂直轴从左向右翻转。例如

fliplr ([1, 2; 3, 4])
     ⇒  2  1
         4  3

详见: flipud, flip, rot90, rotdim.

广告
 
: B = flipud (A)

将数组倒置。

返回的副本A其中行的顺序颠倒。换句话说,A围绕水平轴上下翻转。例如

flipud ([1, 2; 3, 4])
     ⇒  3  4
         1  2

详见: fliplr, flip, rot90, rotdim.

广告
 
: B = flip (A)
: B = flip (A, dim)

返回数组的副本A翻转尺寸dim.

如果dim未指定,则默认为第一个非单重维度。

示例:

## row vector
flip ([1  2  3  4])
      ⇒  4  3  2  1

## column vector
flip ([1; 2; 3; 4])
      ⇒  4
          3
          2
          1

## 2-D matrix along dimension 1
flip ([1 2; 3 4])
      ⇒  3  4
          1  2

## 2-D matrix along dimension 2
flip ([1 2; 3 4], 2)
      ⇒  2  1
          4  3

详见: fliplr, flipud, rot90, rotdim, permute, transpose.

广告
 
: B = rot90 (A)
: B = rot90 (A, k)

以90度为增量旋转数组。

返回的副本A其中元件以90度的增量逆时针旋转。

第二个参数是可选的,它指定要应用多少个90度旋转(默认值为1)。的负值k按顺时针方向旋转矩阵。例如

rot90 ([1, 2; 3, 4], -1)
    ⇒  3  1
        4  2

将给定矩阵顺时针旋转90度。以下是对等语句:

rot90 ([1, 2; 3, 4], -1)
rot90 ([1, 2; 3, 4], 3)
rot90 ([1, 2; 3, 4], 7)

旋转总是在前两个维度(即行和列)的平面上执行。要在任何其他平面上执行旋转,请使用rotdim.

详见: rotdim, fliplr, flipud, flip.

广告
 
: B = rotdim (A)
: B = rotdim (A, n)
: B = rotdim (A, n, plane)

返回的副本A其中元件以90度的增量逆时针旋转。

第二个参数n是可选的,并指定要应用的90度旋转次数(默认值为1)。的负值n按顺时针方向旋转矩阵。

第三个参数也是可选的,它定义了旋转的平面。如果存在,plane是包含矩阵的两个不同有效维度的两元向量。当plane没有给出使用前两个非奇异维度。

例如

rotdim ([1, 2; 3, 4], -1, [1, 2])
     ⇒  3  1
         4  2

将给定矩阵顺时针旋转90度。以下是对等语句:

rotdim ([1, 2; 3, 4], -1, [1, 2])
rotdim ([1, 2; 3, 4], 3, [1, 2])
rotdim ([1, 2; 3, 4], 7, [1, 2])

详见: rot90, fliplr, flipud, flip.

广告
 
: A = cat (dim, array1, array2, …, arrayN)

返回N-D数组对象的连接,array1, array2,…, arrayN按尺寸dim.

A = ones (2, 2);
B = zeros (2, 2);
cat (2, A, B)
  ⇒ 1 1 0 0
     1 1 0 0

或者,我们可以连接AB以以下方式沿着第二维度:

[A, B]

dim可以大于N-D数组对象的维度,因此结果将具有dim尺寸,如下例所示:

cat (4, ones (2, 2), zeros (2, 2))
  ⇒ ans(:,:,1,1) =

       1 1
       1 1

     ans(:,:,1,2) =

       0 0
       0 0

详见: horzcat, vertcat.

广告
 
: A = horzcat (array1, array2, …, arrayN)

返回N-D数组对象的水平级联,array1,array2, …, arrayN沿着维度2。

数组也可以使用用于创建新矩阵的语法水平连接。例如

A = [ array1, array2, ... ]

这种语法的效率略高,因为Octave解析器可以在没有函数调用开销的情况下对数组进行专利。

详见: cat, vertcat.

广告
 
: A = vertcat (array1, array2, …, arrayN)

返回N-D数组对象的垂直连接,array1,array2, …, arrayN沿着维度1。

也可以使用用于创建新矩阵的语法来垂直连接数组。例如

A = [ array1; array2; ... ]

这种语法的效率略高,因为Octave解析器可以在没有函数调用开销的情况下对数组进行专利。

详见: cat, horzcat.

广告
 
: B = permute (A, perm)

返回N-D数组对象的广义转置A.

排列向量perm必须包含元素1:ndims (A) (按任何顺序,但每个元素只能出现一次)。这个N的第个维度A重新map到维度PERM(N)例如

x = zeros ([2, 3, 5, 7]);
size (x)
   ⇒  2   3   5   7

size (permute (x, [2, 1, 3, 4]))
   ⇒  3   2   5   7

size (permute (x, [1, 3, 4, 2]))
   ⇒  2   5   7   3

## The identity permutation
size (permute (x, [1, 2, 3, 4]))
   ⇒  2   3   5   7

详见: ipermute.

广告
 
: A = ipermute (B, iperm)

的倒数permute作用

表达式

ipermute (permute (A, perm), perm)

返回原始数组A.

详见: permute.

广告
 
: B = reshape (A, m, n, …)
: B = reshape (A, [m n …])
: B = reshape (A, …, [], …)
: B = reshape (A, size)

返回具有指定维度的矩阵(m, n,…),其元素取自矩阵A.

矩阵的元素按列主顺序访问(就像存储Fortranarrays一样)。

下面的代码演示了将1x4行向量重塑为2x2平方线。

reshape ([1, 2, 3, 4], 2, 2)
      ⇒  1  3
          2  4

请注意,原始矩阵中的元素总数(prod (size (A)))必须与新矩阵中的元素总数相匹配(prod ([m n …])).

返回矩阵的单个维度可能未指定,Octave将自动确定其大小。空矩阵([])用于符号未指定的维度。

详见: resize, vec, postpad, cat, squeeze.

广告
 
: B = resize (A, m)
: B = resize (A, m, n, …)
: B = resize (A, [m n …])

调整大小A根据需要切断元件。

在结果中,具有某些指数的元素等于的对应值A如果索引在的范围内A; 否则,该元素被设置为零。

换句话说,语句

B = resize (A, dv)

等效于以下代码:

B = zeros (dv, class (A));
sz = min (dv, size (A));
for i = 1:length (sz)
  idx{i} = 1:sz(i);
endfor
B(idx{:}) = A(idx{:});

而是更有效地执行。

要是…就好了m提供,并且它是标量,结果的维度为mxm如果m, n,…都是标量,则结果的维度为mxn通过如果给定一个向量作为输入,则结果的维数从该向量的元素给定。

一个对象的大小可以调整到比它所具有的尺寸更多的尺寸;在这种情况下,假设缺失尺寸为1。将对象大小调整为较小尺寸是不可能的。

详见: reshape, postpad, prepad, cat.

广告
 
: y = circshift (x, n)
: y = circshift (x, n, dim)

循环移位数组的值x.

n必须是一个不长于维度数sin的整数向量x。的值n可以是正的也可以是负的,这决定了的值的方向x被移位。如果的面板n为零,则的相应维度x不会被转移。如果n是标量并且没有dim然后将偏移应用于第一个非奇异维度。

如果标量dim然后沿着指定的尺寸进行操作。在这种情况下n也必须是标量。

示例:

x = [1, 2, 3;
     4, 5, 6;
     7, 8, 9];
## positive shift on rows (1st non-singular dim)
circshift (x, 1)
  ⇒
       7   8   9
       1   2   3
       4   5   6
## negative shift on rows (1st non-singular dim)
circshift (x, -2)
  ⇒
       7   8   9
       1   2   3
       4   5   6
## no shift of rows, shift columns by 1 (2nd dimension)
circshift (x, [0,1])
  ⇒
       3   1   2
       6   4   5
       9   7   8
## shift columns (2nd dimension)
circshift (x, 1, 2)
  ⇒
       3   1   2
       6   4   5
       9   7   8

详见: permute, ipermute, shiftdim.

广告
 
: y = shiftdim (x, n)
: [y, ns] = shiftdim (x)

移动的尺寸xxn这里的n必须是bean整数标量。

n是正的,的维度x向左移动,前导维度循环到末尾。如果n为负,则的维度x向右移动,带有n增加了领先的奇异维度。

使用单个参数调用,shiftdim,删除前导的希尔顿维度,返回第二个输出参数中删除的维度数ns.

例如

x = ones (1, 2, 3);
size (shiftdim (x, -1))
  ⇒   1   1   2   3
size (shiftdim (x, 1))
  ⇒   2   3
[b, ns] = shiftdim (x)
  ⇒ b =
        1   1   1
        1   1   1
  ⇒ ns = 1

详见: reshape, permute, ipermute, circshift, squeeze.

广告
 
: [s, i] = sort (x)
: [s, i] = sort (x, dim)
: [s, i] = sort (x, mode)
: [s, i] = sort (x, dim, mode)

返回的副本x其中元件以递增的顺序排列。

对于矩阵,sort对列中的元素进行排序

例如

sort ([1, 2; 2, 3; 3, 1])
   ⇒  1  1
       2  2
       3  3

如果可选参数dim给定,则矩阵按定义的维度排序dim。可选参数mode定义值的排序顺序。的有效值mode"ascend""descend".

这个sort函数还可以用于生成一个包含排序矩阵中元素的原始行索引的矩阵。例如:

[s, i] = sort ([1, 2; 2, 3; 3, 1])
  ⇒ s = 1  1
         2  2
         3  3
  ⇒ i = 1  3
         2  1
         3  2

对于相等元素,索引是这样的,即相等元素按它们在原始列表中出现的顺序列出。

复杂条目的排序首先按大小进行(abs (z) )以及通过相位角的任何连接(angle (z) ). 例如

sort ([1+i; 1; 1-i])
    ⇒ 1 + 0i
       1 - 1i
       1 + 1i

NaN值被视为大于任何其他值,并被排序到列表的末尾。

这个sort函数也可以用于对字符串和字符串的元胞数组进行排序,在这种情况下,将使用字符串的ASCII字典顺序(大写字母“A”,小写字母“A”)。

中使用的算法sort针对部分排序列表的排序进行了优化。

详见: sortrows, issorted.

广告
 
: [s, i] = sortrows (A)
: [s, i] = sortrows (A, c)

对矩阵的行进行排序A根据中指定的列的顺序c.

默认情况下(c省略,或中未指定的特定列c)使用升序排序。但是,如果的元素c如果为负数,则按降序对相应列进行排序。如果的元素A如果是字符串,则使用字典排序。

示例:按第2列降序排序,然后按第3列升序排序

x = [ 7, 1, 4;
      8, 3, 5;
      9, 3, 6 ];
sortrows (x, [-2, 3])
   ⇒ 8  3  5
      9  3  6
      7  1  4

详见: sort.

广告
 
: tf = issorted (A)
: tf = issorted (A, mode)
: tf = issorted (A, "rows", mode)

如果向量为true,则返回trueA根据排序mode,可以是"ascend", "descend""either".

默认情况下,mode"ascend".NaN的处理方式与sort.

如果可选参数"rows"如果提供了,则检查按行排序的矩阵是否为函数输出sortrows(没有参数)。

此函数不支持稀疏矩阵。

详见: sort, sortrows.

广告
 
: nel = nth_element (x, n)
: nel = nth_element (x, n, dim)

使用定义的顺序选择向量的第n个最小元素sort.

结果相当于sort(x)(n).

n也可以是连续的范围,可以升序l:u或下降u:-1:l,在这种情况下,将返回一系列元素。

如果x是一个数组,nth_element沿定义的维度操作dim,或第一个非奇异维度,如果dim没有给出。

编程说明:nth_element包了C++标准库算法nth_element和partial_sort。平均而言,运算的复杂度为O(M*log(K)),其中M = size (xdim) 和K = length (n) 该函数用于比值K/M小的情况;否则,最好使用sort.

详见: sort, min, max.

广告
 
: A_LO = tril (A)
: A_LO = tril (A, k)
: A_LO = tril (A, k, pack)

返回通过提取矩阵的下三角部分形成的新矩阵A,并将所有其他元素设置为零。

可选的第二个参数指定主对角线上方或下方的对角线数也应设置为零。的默认值kiszero,它包括作为结果一部分的主对角线。如果的值k是非零整数,则元素的选择从offsetof开始k正的主对角线上方的对角线k或低于负的主对角线k。的绝对值k可以不大于下对角线或上对角线的数量。

示例1:排除主对角线

tril (ones (3), -1)
     ⇒  0  0  0
         1  0  0
         1  1  0

示例2:包括第一个上对角线

tril (ones (3), 1)
     ⇒  1  1  0
         1  1  1
         1  1  1

如果可选的第三个参数"pack"则提取的元素不插入矩阵中,而是按列堆叠在另一个之上,并作为列向量返回。

详见: triu, istril, diag.

广告
 
: A_UP = triu (A)
: A_UP = triu (A, k)
: A_UP = triu (A, k, pack)

返回通过提取矩阵的上三角部分形成的新矩阵A,并将所有其他元素设置为零。

可选的第二个参数指定主对角线上方或下方的对角线数也应设置为零。的默认值kiszero,它包括作为结果一部分的主对角线。如果的值k是非零整数,则元素的选择从offsetof开始k正的主对角线上方的对角线k或低于负的主对角线k。的绝对值k可以不大于下对角线或上对角线的数量。

示例1:排除主对角线

triu (ones (3), 1)
     ⇒  0  1  1
         0  0  1
         0  0  0

示例2:包括第一个下对角线

triu (ones (3), -1)
     ⇒  1  1  1
         1  1  1
         0  1  1

如果可选的第三个参数"pack"则提取的元素不插入矩阵中,而是按列堆叠在另一个之上,并作为列向量返回。

详见: tril, istriu, diag.

广告
 
: v = vec (x)
: v = vec (x, dim)

返回通过堆叠矩阵的列获得的向量x一个在另一个之上。

没有dim这相当于x(:).

如果dim的尺寸v设置为dim所有元素沿着最后一个维度。这相当于shiftdim (x(:), 1-dim).

详见: vech, resize, cat.

广告
 
: v = vech (x)

返回平方矩阵中所有上对角线元素消除后得到的向量x并且将结果堆叠在另一列之上一列。

这在矩阵演算中有应用,其中底层矩阵是对称的,并且将值保持在主对角线之上是没有意义的。

详见: vec.

广告
 
: B = prepad (A, l)
: B = prepad (A, l, c)
: B = prepad (A, l, c, dim)

准备标量值c到向量A直到它有长度l如果c如果未给定,则使用值0。

如果length (A) > l,元素从的开始A被移除,直到长度为的向量l获得。

如果A是一个矩阵,元素被预处理或从每一行中删除。

如果可选参数dim给定,沿此维度操作。

如果dim大于的尺寸A,结果将具有dim尺寸。

详见: postpad, cat, resize.

广告
 
: B = postpad (A, l)
: B = postpad (A, l, c)
: B = postpad (A, l, c, dim)

附加标量值c到向量A直到它有长度l如果c如果未给定,则使用值0。

如果length (A) > l,的末尾的元素A被移除,直到长度的向量l获得。

如果A是一个矩阵,元素被添加或从每一行中移除。

如果可选参数dim给定,沿此维度操作。

如果dim大于的尺寸A,结果将具有dim尺寸。

详见: prepad, cat, resize.

广告
 
: M = diag (v)
: M = diag (v, k)
: M = diag (v, m, n)
: v = diag (M)
: v = diag (M, k)

返回带有向量的对角矩阵v在对角线上k.

第二个参数是可选的。如果它是正的,则向量被放置在k-th上对角线。如果是负数,则将其放置在-k-第th次分区。的默认值k为0,并且放置在主对角线上的向量。例如

diag ([1, 2, 3], 1)
   ⇒  0  1  0  0
       0  0  2  0
       0  0  0  3
       0  0  0  0

3输入形式返回一个带有向量的对角矩阵v关于主对角线和所得矩阵的大小m行xn柱。

给定矩阵自变量而不是向量,diag提取k-矩阵的第th对角线。

广告
 
: M = blkdiag (A, B, C, …)

根据构建块对角矩阵A, B, C, …

所有参数都必须是数字,并且必须是二维矩阵或标量。如果任何参数的类型是稀疏的,那么输出也将是稀疏的。

详见: diag, horzcat, vertcat, sparse.

广告

版权所有 © 2024-2025 Octave中文网

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