Matlab的精髓:千锤百炼的矩阵


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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤旅青山迷情人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值