1.常用矩阵的生成
自定义矩阵的生成:
# 空格/逗号表示列,分号/换行表示行
A = [1 2; 3 5; 8 5; 4 6]
# 从1到9,每隔2个取一个整数,即1,3,5,7,9 (2可以是整数/小数) 。2不写,默认1
B = 1:2:9
利用一些内置函数生成特定的矩阵:
# 5*6全0矩阵
C = zeros (5,6)
# 生成5*6的全1矩阵
D = ones(5,6)
#生成4~12之间5个等分的数(小数/整数)。6不写,默认100
E = linspace (4,12,6)
# 生成5个[10^1 , 10^3]之间的数。5不写,默认50
F = logspace(1,3,5)
# 生成5行6列对角线是1,其他是0的矩阵
G = eye(5,6)
常用随机矩阵的生成:
# 生成[0,1]范围内的5*6的随机小数矩阵
A = rand(5,6)
# 只产生一个[0,1]范围内的随机小数矩阵
B= rand
# 在[m,n]范围内生成a行b列小数矩阵
C=m+(n-m)*rand(a, b)
# 生成[1,m]范围内的a*a整数矩阵
D= randi(m,a)
# 生成一个[1,a]之间的整数
E = randi(a)
# 生成[-5,5]范围内的10*1的整数矩阵
F = randi([-5,5],10,1)
提示: 在Matlab中,矩阵是用一对方括号定义
2.矩阵索引
# 访问A的m行n列
A(m,n)
# 访问A的某个元素,按列
A(m)
# 访问A的m~n的数据块,按列
A(m:n)
# 在m~n的范围内,每隔a个数访问,按列
A(m:a:n)
# 直接访问第a,b,c ..个数据
A([a,b,c..])
# a行所有数据 / a列所有数据
A(a,:) / A(:,a)
# 取第1行,第三行,第4列,第2列组合的矩阵,并且第4列为第一列
C = A([1,3],[4,2])
# 取1,4,7行(1~9,每隔3),列也是如此
C= A(1:3:9,2:3:9)
# 第a列和第b列的所有元素
A(:,[a,b])
# a~b行和c列d列元素
A(a:b,[c,d])
# A和B是大小相同的矩阵,如果B的当前位置元素为非0,则取A中当前位置的元素
A(find(B))
# d的值是A矩阵m行,n列对应的单下标索引
d = sub2ind(size(A),m,n)
# A矩阵单下标d转换成双下标的m行,n列
[m,n] = ind2sub(size(A),d)
提示: 在Matlab中,索引下标都是从1开始的,不同于C/C++、java、python等语言中的数组 。 而且矩阵的排序是按照列优先。
3.矩阵求大小
d = size(A) d=x y # x是A的行数,y是A的列数 。三维数组也适合
[m,n] = size(A) # m是A的行数,n是A的列数
d = length(A) # 返回矩阵A维度最大的维度数
d = numel(A) # 返回矩阵中元素的总个数,行数 * 列数
4.矩阵运算
算术运算:
# 矩阵转置
A'
# A的逆矩阵
inv(A)
# 矩阵每个元素*10 ,同样适应于 + - * /
A*10
# 矩阵运算,和线性代数中矩阵的运算是一样的
A+B
A-B
A*B
A/B # 相当于 A*inv(B)
A\B # 相当于 inv(A)*B
# 两个矩阵对应位置上的元素进行计算
A.*B
A./B(A除以B)
A.\B(B除以A)
# 对应位上元素进行计算
A.^B
A.^2
2.^A
# 矩阵的迹,等于矩阵对角线元素的和,矩阵的特征值之和
trace(A)
5.矩阵翻转
# 矩阵 上下翻转,默认中心轴为中间的那一行(共有偶数行的话直接翻转,奇数行的话中间一行不动)
flipud(A)
# 矩阵 左右翻转
fliplr(A)
# A按照逆时针旋转90*k度,k默认为1
rot90(A,k)
6.矩阵的拼接
为方便演示,先定义如下矩阵:
A =
1 2 3
4 5 6
B =
7 8 9
10 11 12
13 14 15
C =
16 17
18 19
拼接演示:
# 1 . A和B根据标识组合起来,得到新矩阵C
# (标识: 1-各个矩阵竖着叠在一起(列数必须一样)
2-各个矩阵横着连在一起(行数必须一样)
D = cat(1,A,B)
D =
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
# 2. 两个矩阵竖着叠在一起,相当于cat标识为1的情况 。(列数必须一样)
D=vertcat(A,B)
D =
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
# 3. 两个矩阵横着连在一起,相当于cat标识为2的情况 。(行数数必须一样)
D = horzcat(A,C)
D =
1 2 3 16 17
4 5 6 18 19
# 4. 矩阵为一个块,以块为基本单位拼成3行个块,2列个块的新矩阵
D=repmat(C,3,2)
D =
16 17 16 17
18 19 18 19
16 17 16 17
18 19 18 19
16 17 16 17
18 19 18 19
# 5. 对角线拼接矩阵
D=blkdiag(A,B)
D =
1 2 3 0 0 0
4 5 6 0 0 0
0 0 0 7 8 9
0 0 0 10 11 12
0 0 0 13 14 15
# 6. 词穷,自己观察吧,提示,一个大组里面有6个小组
D=kron(A,C)
D =
16 17 32 34 48 51
18 19 36 38 54 57
64 68 80 85 96 102
72 76 90 95 108 114