MATLAB知识点:矩阵的拼接和重复

avatar
作者
猴君
阅读量:0

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​

MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili


节选自第3章 3.3.4 矩阵的拼接和重复

有时候我们需要对多个矩阵进行拼接,变成一个大的矩阵。根据矩阵拼接的方向,我们可以分为横向(水平)拼接和纵向(垂直)拼接,如下图所示:

如上图所示:横向拼接要求矩阵的行数相同;纵向拼接要求矩阵的列数相同。

在MATLAB中,我们可以使用命令[A, B] 或 [A  B]对矩阵A和B进行横向拼接,也可以使用MATLAB中的内置函数:horzcat(A,B);类似的,我们可以使用命令[A; B]对矩阵A和B进行纵向拼接,也可以使用MATLAB中的内置函数:vertcat(A,B)。

事实上,horzcat和vertcat两个函数来源自cat函数,这里的cat不是猫的意思,而是单词catenate的缩写,可以翻译成连接。

cat函数的用法如下:

命令cat(dim,A,B)表示沿着维度dim方向将矩阵B拼接到矩阵A的末尾。

  • dim = 1时表示沿着行方向从上往下进行拼接,即纵向拼接,因此cat(1,A,B)等价于vertcat(A,B);

  • dim = 2时表示沿着列方向从左自右进行拼接,即横向拼接,因此cat(2,A,B)等价于horzcat(A,B)。

(horzcat函数中的horz取自英文单词horizontal,表示水平的意思;vertcat函数中的vert取自英文单词vertical,表示竖直的意思)

总结:若A和B的行数相同,那么使用[A, B]、[A  B]、horzcat(A,B)以及cat(2,A,B)都能将A和B横向拼接成一个大的矩阵;若A和B的列数相同,那么使用[A; B]、vertcat(A,B)以及cat(1,A,B)都能将A和B纵向拼接成一个大的矩阵。

下面举几个例子:

(1)    横向拼接的例子

(2)    纵向拼接的例子

(3)    拼接时维度不一致导致的报错

如果横向拼接时矩阵的行数不相同,或者纵向拼接矩阵的列数不相同,那么MATLAB就会报错。

注意,如果要拼接的矩阵的个数大于2,也能使用上面的方法进行拼接,请看下面的例子:

除了对矩阵进行拼接外,有时候我们需要对同一个矩阵进行重复的堆叠。如下图所示,我们将矩阵A重复堆叠m×n次,得到一个新的矩阵:

在MATLAB中,对同一个矩阵进行重复的堆叠的代码为repmat(A,m,n)

(如何记住repmat这个函数?  repeat表示重复,matrix表示矩阵)

我们举两个例子:

除了对整个矩阵进行重复的堆叠外,MATLAB还可以对向量或者矩阵中的元素进行重复,使用到的函数是repelem(如何记住repelem: repeat重复 + element元素)

repelem函数有两种用法:

(1)    重复向量v中的元素:repelem(v, n)

当n为一个正整数时,表示把向量v中的每一个元素都重复n次;n也可以为一个向量,其长度必须和v的长度相同,它可以将v中第i个位置的元素v(i)重复n(i)次,其中n(i)表示n中第i个位置的元素。

(2)    重复矩阵A中的元素:repelem(A,m,n)

m和n分别表示沿着行方向(从上至下)以及沿着列方向(从左至右)将矩阵元素重复的次数,这里的m和n可以是正整数,也可以是向量。如果m是向量,则m的长度要和矩阵A的行数相同;如果n是向量,则n的长度要和矩阵A的列数相同。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!