1.一维数组常用操作:
1.1定数线性采样linspace: X=linspace(a,b,N) 生成数组元素为N个的数组X,其第一个元素为a,最后一个元素b。
1.2定数对数采样logspace:X=logspace(a,b,N)生成数组元素为N个的数组X,其第一个元素为10^a,最后一个元素10^b。
>> x=logspace(1,3,3)
x =
10 100 1000
1.3访问一维数组的元素,以及重建自己需要的数组
数组的元素排序是列优先原则,因此对于数组A=[11 21 12 5 77]来说,A(1)表示第一个元素,A(end)表示最后一个元素,那么A(1:4)表示前4个元素组成的新的数组即[11 21 12 5], A(4:-1:2)表示有第四个,第三个,第二个元素组成的新数组,A(find(A>15))表示A中大于15的元素组成的新数组。
1.4逻辑数组 下面的例子表示A数组元素中大于30的位置对应B数组中的元素值为1,不满足的元素位置在B数组中为0,B数组中的元素只有0或1,这样的B数组叫逻辑数组,那么可以用sum(B)=1表示在A中只有1个元素满足>30。
A =
11 21 12 5 77
>> B=A>30
B =
0 0 0 0 1
2.二维数组的相关操作
2.1二维数组元素的访问,要注意是列优先原则,因此数组可以用一个下标来表示元素,例如对于一个二维数组AA
AA =
1 2 3 4
5 6 7 8
>> AA(:)=0:2:14 %单独下标:表示所有元素 ,按照列优先原则 从0到14偶数赋值
AA =
0 4 8 12
2 6 10 14
>> AA(:,[3,4]) %表示AA二维数组的第三、第四列的元素组成的子数组
ans =
8 12
10 14
2.2二维数组的数组转置与求取共轭转置矩阵
A =
1 3 5
2 4 6
>> B=A.' %矩阵转置操作
B =
1 2
3 4
5 6
如果要求取复数矩阵的共轭矩阵如下
A =
1.000000000000000 + 1.000000000000000i 3.000000000000000 + 3.000000000000000i 5.000000000000000 + 5.000000000000000i
2.000000000000000 + 2.000000000000000i 4.000000000000000 + 4.000000000000000i 6.000000000000000 + 6.000000000000000i
>> B=A' %复数矩阵的共轭矩阵(把矩阵转置后,再把每一个数换成它的共轭复数)
B =
1.000000000000000 - 1.000000000000000i 2.000000000000000 - 2.000000000000000i
3.000000000000000 - 3.000000000000000i 4.000000000000000 - 4.000000000000000i
5.000000000000000 - 5.000000000000000i 6.000000000000000 - 6.000000000000000i
3.矩阵运算与数组运算
指令 | 数组运算 | 指令 | 矩阵运算 |
A.' | 非共轭转置 | A’ | 共轭转置 |
s-B,B-s | 标量s分别于B元素之差 | ||
s+B,B+s | 标量s分别于B元素之和 | ||
s./B,B.\s | s分别被B的元素除 | ||
A.^n | A的每个元素自乘n次 | A^n | A矩阵为方针时,自乘n次 |
p.^A | 以p为底,分别以A的元素为指数求幂值 | ||
A+B | 对应元素相加 | ||
A-B | 对应元素相减 | ||
A.*B | 对应元素相乘 | A*B | 内维相同矩阵的乘积 |
A./B | A的元素被B的对应元素除 | A/B | A右除B |
exp(A) | 以自然数e为底,分别以A的元素为指数,求幂 | ||
log(A) | 对A的各元素求对数 | ||
sqrt(A) | 对A各个元素求平方根 | sqrtm(A) | A的矩阵平方根函数 X=sqrtm(A),即矩阵X*X=A, |
F(A) | 求A各个元素的函数值 | ||
A#B | A、B矩阵对应元素间的关系运算;#代表关系运算符 | ||
A@B | A、B矩阵对应元素间的逻辑运算;@代表逻辑运算符 |
4.数组排列
4.1sort函数排序
sort函数是Matlab内置的排序函数,可以满足常用的排序需求。sort排序时,默认为升序排序,即mode的默认值是‘ascend’,降序要改为 ‘descend’。函数sort()有两个返回值,Y表示对X排序后的结果,Y与I是与X维数相同的矩阵,I 表示Y中对应元素原来在X中的下标,以此保留了数据在原数组的下标信息。
[Y,I] = sort(X,DIM,MODE)
其中 DIM的数值默认是1,表示以数组中各列为单位,对每列的各元素进行升序排列,而DIM的数值为2时,则表示以数组每行数据为单位,将每行数据的元素按照升序排列。例如:
>> A=rand(2,3)
A =
0.814723686393179 0.126986816293506 0.632359246225410
0.905791937075619 0.913375856139019 0.097540404999410
>> sort(A,1) %每一列数据按照升序排列
ans =
0.814723686393179 0.126986816293506 0.097540404999410
0.905791937075619 0.913375856139019 0.632359246225410
>> sort(A,2) %每一行数据按照升序排列
ans =
0.126986816293506 0.632359246225410 0.814723686393179
0.097540404999410 0.905791937075619 0.913375856139019
4.2sortrows函数排序
sortrows函数可以使用矩阵的某列值的大小对整个矩阵行进行排序,就像excel 中按照某列排序并扩展选定区域一样。
[Y,I]=sortrows(X,Colnum)
X是待排序的矩阵,Column 是列的序号,指定按照第几列进行排序,Column为正数,表示按照该列进行升序排列,若按照降序排列则在列号前加上“-”,表示按照该列进行降序排列。返回值I是一维列向量,排序后的行在原来矩阵中的行标。
Pro=rand(4,2)
Pro =
0.800280468888800 0.792207329559554
0.141886338627215 0.959492426392903
0.421761282626275 0.655740699156587
0.915735525189067 0.035711678574190
>> [Y,I]=sortrows(Pro,1) % 按照第一列进行升序排列
Y =
0.141886338627215 0.959492426392903
0.421761282626275 0.655740699156587
0.800280468888800 0.792207329559554
0.915735525189067 0.035711678574190
I =
2
3
1
4
>> [Y,I]=sortrows(Pro,-1) % 按照第一列进行降序排列
Y =
0.915735525189067 0.035711678574190
0.800280468888800 0.792207329559554
0.421761282626275 0.655740699156587
0.141886338627215 0.959492426392903
I =
4
1
3
2
5.数组拆分与合并
5.1数组拆分 将使用mat2cell
mat2cell 将数组转换成cell类型,该cell包含要拆分的子数组
例如官方例子:
A = 4×5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
C = mat2cell(A,[2 2],[3 2])
C=2×2 cell
{2x3 double} {2x2 double}
{2x3 double} {2x2 double}
注意到而第二参数【2,2】表示将A数组的总行数4拆分 成2行+2行;而A数组的纵列数5则按照第三个参数【3,2】拆分为3列+2列,即按下图拆分,每一种颜色表示一个子数组:
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
因此得到的cell类型变量C中包含4个子数组。
接着可以使用deal()拷贝这个包含4个子数组的cell变量C 并且输出为4个独立的变量,每一个变量为一个子数组
[A1,A2,A3,A4]=deal(C{:})
或者 目前(比matlab7.0新的版本)直接用[A1,A2,A3,A4]=C{:}
注意得到各个子数组的对应关系:
A1 = 1 2 3
6 7 8
A2 = 11 12 13
16 17 18
5.2数组合并
数组合并分为 上下行合并 以及 左右列合并
例如上下行合并:A=[1 2 3 4; 5 6 7 8]
B=[22 23 24 25;26 27 28 29]
C=[A;B]
C =
1 2 3 4
5 6 7 8
22 23 24 25
26 27 28 29
注意 上下行合并必须保证A,B两个矩阵的列数目一致,否则会报错。
如将上述A,B两矩阵按照左右列合并,结果存为D,则用下面命令
D=[A B]
D =
1 2 3 4 22 23 24 25
5 6 7 8 26 27 28 29