Matlab矩阵基础操作
MatLab
F5运行脚本
Crtl+N 新建脚本
Crtl+R 注释代码
Crtl+T 取消注释
clear命令:清空工作区;clc命令:清空命令行
MATLAB常用变量类型:数值、字符和字符串及矩阵。
矩阵操作
-
若是有冒号,比如A(:,n)**就表示那些列数为n,行数为任意的所有值;**相应A(m,:)表示去A的第m行所有元素;
-
A(end:-1:1,:),同样逗号前表示行,后表示列。end表示最后一行,
end:-1:1
表示:从最后一行,每次减一,直到第一行;整体意思就是:倒叙取A的整行。 -
a=sum(x);%列求和
a=sum(x,2);%行求和
a=sum(x(😃);%矩阵求和
-
Y=X(2:end)表示:从X的第二个数到结尾。即除了X第一个元素,全部赋值给Y
-
max(A)返回的是一个行向量(返回一个值那就是1 x 1的行向量),向量的第i个元素就是A(A可以是行向量列向量和矩阵)的第i列上的最大值。
[Y, Z] = max(A, [], dim)
; dim等于1时,Y中的值是矩阵A按照列求最大值的集合,Z中保存了最大值在矩阵中的行号;dim等于2时,Y中的值是矩阵A按照行求最大值的集合,Z中保存了最大值在矩阵中的列号。
矩阵创建
在MATLAB中,矩阵的创建方法主要有三种,分别是:直接输入法、函数创建法和导入本地文件中的数据。
1.直接输入
输入矩阵时要以中括号几作为标识符号,短阵的所有元素必须都在中括号内矩阵的同行元素之间用空格或逗号分隔,行与行之间用分号或回车键分隔。
2.函数创建
第一组函数:zeros、ones和eye。这三个函数分别用来创建全为0的矩阵、全为1的矩阵和单位矩阵。
第二组函数:rand、randi和randn。这三个函数分别用来创建均匀分布的随机数均匀分布的随机整数和标准正态分布的随机数。
③导入本地文件中的数据MATLAB可读取本地的文件,支持的常见格式如下:
txt、.dat或.csv(适用于带分隔符的文本文件)>xls、.xlsb、.xlsm、.xlsx、.xltm、.xltx或.ods(适用于电子表格文件)
zeros(100) %100x100的全0方阵
d = rand(5)%5*5的随机数矩阵,范围在0-1内的小数
e = randi([imin,imax],m,n)%范围在imax,imin的m*n的随机整数矩阵
f = randn(5,6)%5*6的符合标准正态分布的随机数矩阵
矩阵元素修改
直接利用等号赋值的方法对矩阵中引用位置的元素进行修改。
使用线性索引(单下标的索引)的方式对矩阵的元素进行修改。
注意:如果你在赋值时将一个或多个元素置于矩阵现有的行和列索引的边界之外,则会将矩阵的大小进行拓展,MATLAB会将没有赋值的位置的元素自动用0填充,使其保持为完整的矩形。
A=[1:3;4:6;7:9]
A =
1 2 3
4 5 6
7 8 9
%修改
A(2,:) = 10;
A =
1 2 3
10 10 10
7 8 9
%修改第一行第1列,2列;第三行的第1列、2列
A([1,3],[1,2]) = 0;
A =
0 0 3
10 10 10
0 0 9
矩阵元素的删除
如果我们将等号右侧变成空向量[],则可以删除对应位置的元素。需要注意的是,通常只能删除矩阵的整行或者整列,否则会报错。
也可以通过线性索引来删除矩阵的元素。使用线性索引删除后,MATLAB会将矩阵中剩下的元素按照线性索引的顺序放入到一个向量中。另外,使用线性索引可以删除任意位置的元素,不需要删除矩阵的一整行或者一整列。
A=[1:3;4:6;7:9]
%删除第一列
A(:,1)=[];
A =
2 3
5 6
8 9
%删除第一列,最后一列
A(:,[1,end]) = []
A =
2
5
8
A(1,2) = []%报错,只能通过线性索引删除单个索引
A(1) = [];
%剩下的元素按照线性索引的顺序放入到一个向量中 ,使用reshape函数实现矩阵的拼接重构重排
4 7 2 5 8 3 6 9
矩阵的拼接
横向拼接:A和B的行数相同,那么使用[A,B]、[A B]以及 cat(2,A,B)都能将 A和 B横向拼接成一个大的矩阵。
纵向拼接:A和B的列数相同,那么使用**[A;B]以及 cat(1,A,B)都能将A和B纵向拼接**成一个大的矩阵。
A = zeros(3,2);
B = ones(3,1);
C = [A,B]%先后顺序,那么拼接的顺序也会跟着变
C =
0 0 1
0 0 1
0 0 1
D = randi(2,2);
F = [A;D]%注意这里列拼接是分号
F =
0 0
0 0
0 0
2 1
1 2
矩阵的拼接重构
reshape函数:更改矩阵的形状,reshape(A,m,n)或者reshape(A,[m,n])
sort 函数:对向量或者矩阵进行排序(默认升序),sort(A,dim),在最后面加一个输入参数’descend’,变成从大到小的降序排列,dim=1时,沿着行方向(从上至下)对矩阵的每一列升序;排列dim=2时,沿着列方向(从左至右)对矩阵的每一行升序排列。
sortrows函数:基于矩阵的某一列对矩阵进行排序,同一行的元素不会改变。sortrows(score,列),在最后面加一个输入参数’descend’,变成从大到小的降序排列。
A = randi(10,2,6)
A =
8 8 8 7 5 2
9 1 7 8 6 5
%重构矩阵为3*4
B = reshape(A,3,4)%按照线性索引重新来组织矩阵中的元素,所以不能在重构时更改元素的个数,否则报错
B =
4 7 7 4
4 1 2 4
2 5 1 8
B = reshape(A,3,[])%重构为3行的矩阵,列数自动计算。“行”维度的需要被元素总数整除,否则报错
A = randi(10,2,6)
sort(A,1)%按照列进行排序
1 1 7 9 5 2
4 10 10 10 6 9
sort(A,2)%按照行进行排序 sort(A,2,'descend')降序排列
1 2 2 3 4 7
1 6 8 8 9 10
A = randi(10,2,6)
A =
4 2 3 7 4 9
10 4 2 2 4 6
sort(A,2,'descend')
ans =
9 7 4 4 3 2
10 6 4 4 2 2
sortrows(A,2,"descend")%基于矩阵的第2列对矩阵进行排序,同一行的元素不会改变
ans =
10 4 2 2 4 6
4 2 3 7 4 9
矩阵的运算
A = randi(10,3,4)%10以内的随机整数,3*4的矩阵
sum(A,1)%等效于sum(A) 列求和返回行向量: 17 18 20 11
sum(A,2)%行向量求和,返回列向量
A(:)%把A矩阵变成一个列向量
sum(A(:))% 等效于sum(A,'all')对A进行求和: 67
prod(A(:))% 求乘积函数 896000
diff%计算差分
mean%平均值
median%中位数
mode%众数
var%方差
std%标准差
min%最小值
max%最大值
%矩阵加减,对于不同行,不同列的两个矩阵,进行隐式的拓展为相同行,相同列再进行相加减。
A = [2;5]
B = [1,8,3]
A =
2
5
B =
1 8 3
C = A+B
C =
3 10 5
6 13 8
矩阵加减时,拓展为相同行、列后按对应的元素相加减。
*
和 .*
分别表示现代中的矩阵相乘和两个矩阵中对应元素相乘
矩阵乘除:/
(右除)、\
(左除)和./
矩阵乘方: A^3
矩阵转置 : `
A = randi(10,3,4)
B = randi(10,4,4)
A*B %矩阵相乘
ans =
69 52 53 78
126 106 134 186
114 95 114 146
B = randi(10,1,4)
A.*B %对应元素相乘 A./B 对应元素相除 A .^ B 对应元素的几次方
A =
2 1 4 3
4 7 1 8
9 1 5 9
B =
6 10 8 4
ans =
12 10 32 12
24 70 8 32
A^3 % 等价于 A * A * A,所以要求A需要是一个方阵,行数=列数
A` %矩阵的转置 对比于 .` 的区别就是在复数矩阵转置是,会变为共轭复数,即实部不变,虚部变为负数。
A = [1 2 3+i; 2-i,2,3]
A =
1.0000 + 0.0000i 2.0000 + 0.0000i 3.0000 + 1.0000i
2.0000 - 1.0000i 2.0000 + 0.0000i 3.0000 + 0.0000i
A' %对于复数元素:实部不变,虚部变为负数。
ans =
1.0000 + 0.0000i 2.0000 + 1.0000i
2.0000 + 0.0000i 2.0000 + 0.0000i
3.0000 - 1.0000i 3.0000 + 0.0000i
A.' %对于复数元素:虚部不会变号
ans =
1.0000 + 0.0000i 2.0000 - 1.0000i
2.0000 + 0.0000i 2.0000 + 0.0000i
3.0000 + 1.0000i 3.0000 + 0.0000i
关系运算符:关系运算符可以用来比较两个数组中元素的关系,如果比较的结果为真,则MATLAB 会返回逻辑值1;如果结果为假,则会返回逻辑值0。
==
等于、~=
不等于、>=
大于等于
A = [1:4]
B = ones(3,4)
A == B
A =
1 2 3 4 %会隐式扩充为3行
B =
1 1 1 1
1 1 1 1
1 1 1 1
ans = %只有第一列的元素相等
3×4 logical 数组
1 0 0 0
1 0 0 0
1 0 0 0