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) (按任何顺序,但每个元素只能出现一次)。这里的A的第N个维度重新映射到维度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.

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

下面的代码演示了将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的整数向量xn的值可以是正的也可以是负的,这决定了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必须是一个整数标量。

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)

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

默认情况下(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。A根据mode排序,可以是"ascend", "descend", "either", 或 "monotonic" ("either""monotonic"等效).

默认情况下,mode"ascend".排序的处理方式与sort相同.

如果提供了可选参数"rows",那么检查按行排序的矩阵是否为函数sortrows(无参数调用)的输出。

此函数不支持稀疏矩阵。

详见: sort, sortrows.

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

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

结果相当于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,并将所有其他元素设置为零。

可选的第二个参数指定主对角线上方或下方的对角线数也应设置为零。k的默认值是0,它包括作为结果一部分的主对角线。如果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,并将所有其他元素设置为零。

可选的第二个参数指定主对角线上方或下方的对角线数也应设置为零。k的默认值是0,它包括作为结果一部分的主对角线。如果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个对角线。如果是负数,则将其放置在下第k个对角线。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条对角线。

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

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

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

详见: diag, horzcat, vertcat, sparse.

广告

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

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