matlab 数组重新排列,重构和重新排列数组

重构

reshape 函数可以更改数组的大小和形状。例如,将 3×4 矩阵重构成 2×6 矩阵。

A = [1 4 7 10; 2 5 8 11; 3 6 9 12]

A = 3×4

1 4 7 10

2 5 8 11

3 6 9 12

B = reshape(A,2,6)

B = 2×6

1 3 5 7 9 11

2 4 6 8 10 12

只要不同形状中的元素数量相同,就可以将它们重构成具有任意维度的数组。使用 A 中的元素,创建一个 2×2×3 的多维数组。

C = reshape(A,2,2,3)

C =

C(:,:,1) =

1 3

2 4

C(:,:,2) =

5 7

6 8

C(:,:,3) =

9 11

10 12

转置和翻转

线性代数中常见的任务是转置矩阵,即将矩阵的行变成列,将列变成行。要实现此目的,可以使用 transpose 函数或 .' 运算符。

创建一个 3×3 矩阵并计算其转置。

A = magic(3)

A = 3×3

8 1 6

3 5 7

4 9 2

B = A.'

B = 3×3

8 3 4

1 5 9

6 7 2

类似的运算符 ' 可以计算复矩阵的共轭转置。此操作计算每个元素的复共轭并对其进行转置。创建一个 2×2 复矩阵并计算其共轭转置。

A = [1+i 1-i; -i i]

A = 2×2 complex

1.0000 + 1.0000i 1.0000 - 1.0000i

0.0000 - 1.0000i 0.0000 + 1.0000i

B = A'

B = 2×2 complex

1.0000 - 1.0000i 0.0000 + 1.0000i

1.0000 + 1.0000i 0.0000 - 1.0000i

flipud 上下翻转矩阵的行,fliplr 左右翻转矩阵的列。

A = [1 2; 3 4]

A = 2×2

1 2

3 4

B = flipud(A)

B = 2×2

3 4

1 2

C = fliplr(A)

C = 2×2

2 1

4 3

平移和旋转

使用 circshift 函数,可以将数组的元素平移一定的位置数。例如,创建一个 3×4 矩阵,然后将其各列向右平移 2 个位置。第二个参数 [0 2] 要求 circshift 将各行平移 0 个位置,将各列向右平移 2 个位置。

A = [1 2 3 4; 5 6 7 8; 9 10 11 12]

A = 3×4

1 2 3 4

5 6 7 8

9 10 11 12

B = circshift(A,[0 2])

B = 3×4

3 4 1 2

7 8 5 6

11 12 9 10

要将 A 的各行向上平移 1 个位置而各列保持不动,请将第二个参数指定为 [-1 0]。

C = circshift(A,[-1 0])

C = 3×4

5 6 7 8

9 10 11 12

1 2 3 4

rot90 函数可以将矩阵逆时针旋转 90 度。

A = [1 2; 3 4]

A = 2×2

1 2

3 4

B = rot90(A)

B = 2×2

2 4

1 3

如果再旋转 3 次(使用第二个参数指定旋转次数),最后将得到原始矩阵 A。

C = rot90(B,3)

C = 2×2

1 2

3 4

排序

对数组中的数据进行排序也是一项实用功能,MATLAB 提供了几种排序方法。例如,sort 函数可以按升序或降序对矩阵的每一行或每一列中的元素进行排序。创建矩阵 A,并按升序对 A 的每一列进行排序。

A = magic(4)

A = 4×4

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

B = sort(A)

B = 4×4

4 2 3 1

5 7 6 8

9 11 10 12

16 14 15 13

按降序对每一行进行排序。第二个参数值 2 指定您希望逐行排序。

C = sort(A,2,'descend')

C = 4×4

16 13 3 2

11 10 8 5

12 9 7 6

15 14 4 1

要整行排序,请使用 sortrows 函数。例如,根据第一列中的元素按升序对 A 的各行排序。行的位置发生变化,但每一行中元素的顺序不变。

D = sortrows(A)

D = 4×4

4 14 15 1

5 11 10 8

9 7 6 12

16 2 3 13

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值