matlab 矩阵转数组,matlab数组与矩阵

时间:2025-04-05 07:14:01

××××××××××××××××××××××××××

数组与矩阵

××××××××××××××××××××××××××

得到关于数组与矩阵的信息:

isempty() : 为空,即为[]

isscalar() : 为标量,即为单一的一个数字

isvector() : 为向量,即为数组或者矩阵

isrow() : 为行向量

iscolumn() : 为列向量

issparse() : 为稀疏矩阵

size() : 返回数组或者矩阵的行列大小 , 返回为 [ rowline_number , columnline_number ]

length() : 返回数组或者矩阵中行或者列中长度最大的一个

ndims() : 返回数组或者矩阵的维度

使用命令who 可以查看有哪些变量

使用命令whos 可以查看变量的存储状态

创立数组与矩阵:

A_matrix = [ 1:3 ; 2:4 ; 3:5 ]

******** 显示结果 ********

a =

1 2 3

2 3 4

3 4 5

*******************************

其中 1:3 称为分片,默认步长为1 , 由 1 递增加步长 1 直到 3 为止 。

那么 1 : 2 : 9 所得即为 [ 1 3 5 7 9 ] ,步长为 2 , 增长到 9 。 (当然步长可以为负数)

矩阵的运算:

普通的运算符号也可以直接用于矩阵与数组之间 , 例如 + - * / \

其中 / 为左除 , \ 为右除 。 A_matrix / B_matrix 等同于 B_matrix \ A_matrix

但运算符号 ^ 与 .^ 存在区别:

A_matrix ^ 2 等同于 A_matrix * A_matrix

A_matrix .^2 等同于 矩阵中的每一个元素改为自身的平方 。

******************************************************

>> a.^2

ans =

1 4 9

4 9 16

9 16 25

*******************************************************

矩阵的转置,求逆与点乘:

转置: 使用符号 ' 或者 .' 或者使用函数 transpose(matrix)

A 为矩阵 , 那么A的转置即为 A' A.' transpose(A)

但 ' 并非为真正的转置,因为当矩阵成员中存在虚数时,转置后的结果中虚数会变为

原虚数的共轭虚数,例如:

*******************************************************************

>> a = [ 1+1j 2 ; 2+3j 5 ]

a =

1.0000 + 1.0000i 2.0000 + 0.0000i

2.0000 + 3.0000i 5.0000 + 0.0000i

>> a'

ans =

1.0000 - 1.0000i 2.0000 - 3.0000i

2.0000 + 0.0000i 5.0000 + 0.0000i

>> a.'

ans =

1.0000 + 1.0000i 2.0000 + 3.0000i

2.0000 + 0.0000i 5.0000 + 0.0000i

*********************************************************************

求逆: 直接使用inv函数,inv(matrix)即可得到相应矩阵的逆矩阵

点乘: 使用函数dot( A_matrix , B_matrix ) 完成矩阵A与矩阵B的点乘

修改数组与矩阵的部分值:

**********************************************************************************************

>> A = [ 11 10 9 34 837 ] % 建立数组 A

A =

11 10 9 34 837

>> C = ( A < 33 ) % 查找符合要求的元素,返回为逻辑类型

C =

1 1 1 0 0

>> whos

Name Size Bytes Class Attributes

A 1x5 40 double

C 1x5 5 logical

>> A(C) = 32 % 通过数组C修改相应的符合 < 33 条件的元素的值

A =

32 32 32 34 837

**********************************************************************************************

当然也可以通过find函数来进行相同的操作

A( find( A < 33 ) ) = 32 % 只是对于find函数而言,返回的数据是符合要求的元素的index索引号

矩阵的翻转与排序操作:

对于排序而言,可以使用sort函数进行排序 sort( X , DIM , MODE )

X: 为数组或者矩阵 DIM: dimension维度 mode:'ascend'正序 'descend' 反序

默认对列排序,维度为 1 , 模式为'ascend'正序

***********************************************************

>> a = [ 3:5 ; 1:3 ; 4:6 ]

a =

3 4 5

1 2 3

4 5 6

>> sort(a)

ans =

1 2 3

3 4 5

4 5 6

***********************************************************

对于数组与矩阵的翻转可以使用的函数有

rot90( matrix , k ) 矩阵逆时钟旋转 k*90 度 [ rotate 90 degree ]

fliplr(A) 矩阵左右旋转 [ flip left , flip right ]

flipud(A) 矩阵上下旋转 [ flip up , flip down ]

**************************************************************

>> a = [ 1:9 ; 2:10 ]

a =

1 2 3 4 5 6 7 8 9

2 3 4 5 6 7 8 9 10

>> flipud(a)

ans =

2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 9

>> a % 调用函数并没有改变 矩阵 a

a =

1 2 3 4 5 6 7 8 9

2 3 4 5 6 7 8 9 10

>> fliplr(a)

ans =

9 8 7 6 5 4 3 2 1

10 9 8 7 6 5 4 3 2

a =

1 2 3 4 5 6 7 8 9

2 3 4 5 6 7 8 9 10

>> rot90(a,1)

ans =

9 10

8 9

7 8

6 7

5 6

4 5

3 4

2 3

1 2

**************************************************************

对矩阵的求和操作:

(1) 使用函数sum函数对矩阵求和

sum( A_matrix , Dim ) Dim :维度默认为 1 , 即默认为列求和

对一个矩阵使用sum两次即得到矩阵每个元素的和

****************************************************

>> a

a =

1.0000 + 1.0000i 2.0000 + 0.0000i

2.0000 + 3.0000i 5.0000 + 0.0000i

>> sum(a)

ans =

3.0000 + 4.0000i 7.0000 + 0.0000i

>> sum(a,2)

ans =

3.0000 + 1.0000i

7.0000 + 3.0000i

>> sum(sum(a))

ans =

10.0000 + 4.0000i

*****************************************************

(2) 使用累加函数cumsum , 对矩阵进行累加

cumsum(A,DIM) DIM 默认为 1 , 对列进行操作

若 matrix A 为 [

a1 a2 a3 ;

b1 b2 b3 ;

c1 c2 c3

]

那么对A使用cumsum函数后,结果为

[

a1 a2 a3 ;

a1+b1 a2+b2 a3+b3 ;

a1+b1+c1 a2+b2+c2 a3+b3+c3

]

*****************************************************

>> a

a =

1.0000 + 1.0000i 2.0000 + 0.0000i

2.0000 + 3.0000i 5.0000 + 0.0000i

0.0000 + 5.0000i 6.0000 + 8.0000i

>> cumsum(a)

ans =

1.0000 + 1.0000i 2.0000 + 0.0000i

3.0000 + 4.0000i 7.0000 + 0.0000i

3.0000 + 9.0000i 13.0000 + 8.0000i

*****************************************************

通过原矩阵构造新的矩阵:

(1) 以已有的矩阵为基本元素来构造新的矩阵,使用repmat函数:

**************************************************************

>> a = [ 1:3 ; 2:4 ]

a =

1 2 3

2 3 4

>> repmat(a,2,3)

% 以矩阵 a 为基本的元素构造矩阵

% [ a a a ; a a a ]

ans =

1 2 3 1 2 3 1 2 3

2 3 4 2 3 4 2 3 4

1 2 3 1 2 3 1 2 3

2 3 4 2 3 4 2 3 4

**************************************************************

(2) 以已有矩阵作为对角块建立新的矩阵,使用blkdiag函数:

**************************************************************

>> blkdiag(a,a)

ans =

1 2 3 0 0 0

2 3 4 0 0 0

0 0 0 1 2 3

0 0 0 2 3 4

>> blkdiag(a,a,a)

ans =

1 2 3 0 0 0 0 0 0

2 3 4 0 0 0 0 0 0

0 0 0 1 2 3 0 0 0

0 0 0 2 3 4 0 0 0

0 0 0 0 0 0 1 2 3

0 0 0 0 0 0 2 3 4

**************************************************************

(3) 矩阵形状修改,使用函数reshape,但是原矩阵的元素个数不变:

**************************************************************

>> size(a)

ans =

2 3

>> a

a =

1 2 3

2 3 4

>> reshape(a,3,2)

ans =

1 3

2 3

2 4

**************************************************************