Matlab的concur、repmat、kron、reshape函数介绍

        也算是经常用到Matlab的concur、repmat、kron、reshape这四个函数吧,但总也记不住其具体用法,每次使用前都要琢磨一下,因此决定将其基本使用方法汇总起来记录一下,故有此文。

1、concur

        有时需要将某个列向量变成一个每列均相同的矩阵,这里就可以使用concur。

        Command Window中help信息如下:

Matlab的concur、repmat、kron、reshape函数介绍

使用举例如下:

Matlab的concur、repmat、kron、reshape函数介绍

2、repmat函数

        该函数也可以使用将某个列向量变成一个每列均相同的矩阵,进一步地还可以将矩阵复制。

        Command Window中help信息如下:

Matlab的concur、repmat、kron、reshape函数介绍

使用举例如下:

Matlab的concur、repmat、kron、reshape函数介绍

更通用的使用例子如下:

Matlab的concur、repmat、kron、reshape函数介绍

3、kron函数

        以上介绍的repmat的功能也可以使用kron实现,当然kron还可以实验更多功能。其实,kron函数是用来计算矩阵的克罗内克积(Kronecker product)的函数(有关克罗内克积可参见百度百科)。

        Command Window中help信息如下:

Matlab的concur、repmat、kron、reshape函数介绍

其中repmat中的第1个例子可使用kron实现如下:

Matlab的concur、repmat、kron、reshape函数介绍

第2个例子可使用kron实现如下:

Matlab的concur、repmat、kron、reshape函数介绍

有时还想把矩阵的每一列(或行)分别复制n份,这里仍可以kron实现,如第一种实现bb=kron(aa,ones(1,3))将每一列复制了3份,而第二种实现bb=kron(aa,ones(3,1))将每一行复制了3份:

Matlab的concur、repmat、kron、reshape函数介绍

4、reshape

        该函数可以将包含N个元素的m1*n1矩阵变为m2*n2的矩阵,reshape只改变矩阵的维度,输入参数要保证矩阵元素个数不变,即N=m1*n1 = m2*n2

        Command Window中help信息如下:

Matlab的concur、repmat、kron、reshape函数介绍

注意矩阵变形时按列取值(whose elements are taken columnwise from X),使用例子如下:

Matlab的concur、repmat、kron、reshape函数介绍

其中bb=reshape(aa,3,2)将2*3矩阵变成了3*2矩阵,而bb=reshape(aa,1,6)则变成为1*6的矩阵(行向量),注意在改变维度时是按列取值的。

 

        使用reshape还可以实现更复杂的功能,例如要对一个3*4的矩阵按如下规则如始化:第1列第2个元素为1、第2列第3个元素为1、第3列第3个元素为1、第4列第1个元素为1,当然可以先初始化aa=zeros(2,3);然后再依次初始化各个元素的值,但在matlab里能矩阵化实现的尽量矩阵化实现,当矩阵较大时,节省的时间就感觉到了。这里实现如下:

Matlab的concur、repmat、kron、reshape函数介绍

5、补充:矩阵向量化

        说到reshape,补充一个Matlab常用的功能,就是将矩阵向量化,使用冒号即可,举例如下:

Matlab的concur、repmat、kron、reshape函数介绍

注意,在向量过程中,也是按列取值的,如果按行取值,则可以先将矩阵转置。