专栏首页电子狂人Matlab系列之矩阵秀

Matlab系列之矩阵秀

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维的矩阵,然后对其做指定的变换:

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

本文分享自微信公众号 - 电子狂人(DZKR666),作者:狂人V

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Matlab系列之数组(矩阵)的生成

    从本篇开始,会有一段时间都将用于记录数组、矩阵的操作等等,如果以前没有接触过相关的,可能会觉得要展示的是很复杂的东西,但并不是,这是一个很简单的部分,但也是一个...

    狂人V
  • Matlab系列之运算符和标点符号的功能介绍

    。就不多讲太多废话了,开始分享今天的内容,对MATLAB的运算符做个介绍,然后再对标点符号进行功能说明。

    狂人V
  • Matlab系列之符号运算(下)

    上一篇主要对符号对象进行了一些生成和使用的基本操作,然后本篇将介绍符号矩阵、微积分、积分变换以及符号方程的求解,具体内容就往下慢慢看了。

    狂人V
  • 基于协同过滤的SVD的推荐系统

    参考论文:Using Singular Value Decomposition Approximation For Collaborative Filterin...

    张凝可
  • 透析矩阵,由浅入深娓娓道来—高数-线性代数-矩阵

    线性代数是用来描述状态和变化的,而矩阵是存储状态和变化的信息的媒介,可以分为状态(静态)和变化(动态)信息来看待。

    周陆军
  • 矩阵相乘法则和技巧

    只有当第一个矩阵(左矩阵)的列数等于第二矩阵(右矩阵)时,两矩阵才能相乘。因为得到的结果矩阵的i一行的第j个元素(Cij)是左矩阵第i行所有元素分别与右矩阵第...

    vv彭
  • 数据分析与数据挖掘 - 06线性代数

    导数是高等数学中非常重要的知识点,也是人工智能的算法应用中比较常用的一个知识,这一章我们的重点就是讲解一下导数和其求导法则。首先我们来看一下导数的基本概念:函数...

    马一特
  • 数学实验(预习)

    也可以用初等变换求逆矩阵,构造一个n行2n列的矩阵(A E),并进行初等变换,A编程单位矩阵的时候,E就变成了A的逆矩阵.

    云深无际
  • 吹弹牛皮之Unity 引擎基础 - 矩阵(三)

    上图中展示了p,q两个基向量(单位向量)绕原点旋转后得到的新基向量p'和q'。根据勾股定理有:

    用户7698595
  • 吹弹牛皮之Unity 引擎基础 - 矩阵(一)

    沉迷于硬笔的练习偷懒了很长时间。过去的7月份仅仅更新了一篇文章,实在是深表遗憾。接着之前的向量篇小菜继续向下探索。谢谢大家长久来的鼓励和支持。

    用户7698595

扫码关注云+社区

领取腾讯云代金券