前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matlab系列之矩阵秀

Matlab系列之矩阵秀

作者头像
狂人V
发布2020-08-12 10:54:41
1.3K0
发布2020-08-12 10:54:41
举报
文章被收录于专栏:电子狂人电子狂人

1

前言

上次讲完了数组的基本操作,不知道是否熟悉使用了,本篇将要对矩阵部分的操作再进行介绍,这部分的内容我觉得蛮有意思的,不过你们觉不觉得我就不知了,但还是想让你们可以感受到它的有趣之处。

~Show Time~

2

矩阵秀

对于矩阵的操作,通俗点说就是行列之间变来变去,当然这只是很浅面的一个体现,学过线性代数相关课程的,我想,你对矩阵的内容应该都有所了解,其在MATLAB中的精髓就等我一一揭开了~

1、转置

转置是个很好理解的东西,就是相当于将原本的行列转了一下,行列之间的关系做了对调,还没懂?那直接看实例来了解了解:

看到了吧,简单来看,转置就是把横着的行变成了竖的,MATLAB中的转置,就是直接在变量后加一个单引号,就如例子里面的A',如果A是一个复数矩阵,那么这时候的A'就相当于是共轭矩阵,来个例子看看效果

代码:

re=[1:5]; im=[6:10]; A=re+i*im B=A'

运行结果:

如果要弄成非共轭矩阵,就需要采用 A.' 这种形式,更改代码后,运行结果:

矩阵转置的部分就讲到这,接着开始说下矩阵重排的操作。

2、重排

对于矩阵重排这个名字,你可能会有点陌生,但是讲完后,你就肯定可以知道这个名字为什么要叫这个名了。

对于已经存在的矩阵,都可以根据存储的方式进行重排,就是将原本的行列按照自己设定的行列数进行重新排列,但是也需要按照规则进行,直接上实例,看图:

先是直接产生一个3行2列的矩阵A,然后使用冒号的功能,直接变成了只有一列的矩阵B,最后使用reshape函数将矩阵A变成了2行3列的新矩阵C,且从中都可以看到,他们都是按列的顺序进行重新排列,第一列排完了才接着下一列的数据。

注意:reshape不能改变原矩阵的元素数目。

顺便来秀一个小操作,重新赋值感觉有点用,也相当于是构成新矩阵了,直接看图进行了解吧,我就不分析了,学会了已经记录的文章,分析就很简单了:

当然,除了这种粗暴的赋值以外,还有一种温柔的赋值,可以对矩阵的单个元素进行重新赋值的操作,比如将刚刚的A的5变成555,看操作:

这种基本上就是直接按照自己的意愿来改变原矩阵中特定行列的值,假如你想说,改变不在矩阵中的行列,行不行?

可以很肯定的告诉你,行!

来看下运行结果:

看到结果,是不是猜到作用了,就是很粗暴的将原矩阵进行扩展,直到实现了你想要改变的值,其余扩展部分的值就全部赋为0。

3、拆分

看到标题名字,你也应该猜到要讲的内容是怎样的了,很明显,就是将一个大的矩阵拆掉,然后获得一个子矩阵,在进行拆分之前还需要了解一个比较重要的点,就是要清楚的了解元素的序号,该序号和下标是一一对应的,上次文章中的寻址已经有所介绍,这次再进行说明一番,和刚刚的重排一个样,都是按列进行的,序号是按列进行编号,先第一列,再第二列,依此类推,例如:

序号和下标的对应关系也已经说过,以一个m x n 的矩阵A为例,A(i,j)表示第i行j列的元素,其序号就是:(j-1)*m+i,当然你也可以直接一列一列的数

不过很显然,还有更快进行关系转换的工具,两个函数,分别用于下标转序号(sub2ind)和序号转下标(ind2sub),看下使用结果:

简单说下结果,A是一个3行2列的矩阵,然后用sub2ind将A矩阵2行2列的元素的下标转换成序号,再用ind2sub将矩阵A中序号为4的元素下标表示出来,并分别用i和j存该序号对应元素的行列标号。

回到本标题的正式内容,拆分~

拆分的形式主要可与分成两种;

第一种

第一种已经出现过很多次了,就是使用冒号来获得子矩阵。

A(i,:)表示取矩阵A第i行的全部元素;

A(:,j)表示取矩阵A第j列的全部元素;

A(i:i+m,:)表示取矩阵A第i~i+m行的全部元素;

A(:,k:k+n)表示取矩阵A第k~k+n列的全部元素;

A(i:i+m,k:k+n)表示取矩阵A第i~i+m行,第k~k+n列的全部元素。

直接演示几个看下结果:

刚刚开始讲到的A(:)直接将矩阵中的元素排成一个列向量也属于拆分的一种形式,如果忘了就翻到上面再看看。

除了以上几种使用具体的维数,来获得子矩阵的方法外,还可以和end运算符结合起来获取子矩阵,end在以前的篇章中也有过介绍,就是代表所在维的最后一行或者最后一列,继续用这个A矩阵来简单看下使用后的结果:

第二种

在MATLAB中,[ ]代表一个空矩阵,如果给某个变量X直接赋值为空矩阵,则只需要X=[ ],这种矩阵的维度是0,因此可以使用这种方法将某个大矩阵中的一些元素删除,但然后得到一个新的矩阵,直接看操作:

4、拼接

既然矩阵有拆分,当然也可以有拼接,即将多个矩阵拼成一个矩阵,拼接的方法就是使用[ ],比如要将B和C拼成A,就可以这样:A=[B,C];也可以A=[B; C];这两个的区别就是拼接的方向不同,前面的是水平方向拼接即行方向,后面的是垂直方向拼接即列方向;因此要注意对应方向的维度要一致。

举个简单的实例对比下就知道了,先产生两组列数相同,行数不同的矩阵。

然后进行拼接:

很显然,列方向进行拼接就可以,行方向拼接就不行。

此外还要一些函数也可以实现拼接的功能,如cat,调用格式:C=cat(dim,A,B)

其中dim就是拼接方向,A和B就是待拼接的矩阵,C就是拼接后的矩阵,当然也可以使用多个矩阵进行,比如C=cat(dim,A,B,D,....)

简单演示下:

从结果看得出来,dim为1是按列拼接,为2是按行拼接。

以下列出一些拼接相关的函数,不过感觉不太常用,可以自己摸索下使用:

函数

功能

cat

拼接矩阵

horcat

水平方向拼接多个矩阵

vercat

垂直方向拼接多个矩阵

remat

复制一个矩阵到另一个矩阵

blkdiag

对角连接多个矩阵

5、变换

在MATLAB中还提供了一些变换函数,可以将矩阵变成想要的形式的,如rot90,tril,triu,fliplr,flipud等,做一两个演示,先产生一个3维的矩阵,然后对其做指定的变换:

图片里有些数据多的,图片的内容就弄得比较小了,应该是不影响阅读感

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子狂人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、转置
  • 2、重排
  • 3、拆分
    • 第一种
      • 第二种
      • 4、拼接
      • 5、变换
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档