• [置顶] [MATLAB技术贴]漫谈MATLAB矩阵转置


    矩阵转置是matlab最基本的操作了,但这个基本操作,也是很多初学者容易出现问题的地方。本帖通过几个实例演示matlab矩阵转置的操作。

    方法一:'  运算符与  .'  运算符

    >>a = rand(3,5)


    a =


        0.9340    0.4694    0.1622    0.5285    0.2630
        0.1299    0.0119    0.7943    0.1656    0.6541
        0.5688    0.3371    0.3112    0.6020    0.6892

    >>b = a'


    b =


        0.9340    0.1299    0.5688
        0.4694    0.0119    0.3371
        0.1622    0.7943    0.3112
        0.5285    0.1656    0.6020
        0.2630    0.6541    0.6892


    >> b2 = a.'


    b2 =


        0.9340    0.1299    0.5688
        0.4694    0.0119    0.3371
        0.1622    0.7943    0.3112
        0.5285    0.1656    0.6020
        0.2630    0.6541    0.6892


    是不是说明.'运算符和‘运算符的结果一致呢?其实不然,.'运算类似于.*,./,是作用于非共轭矩阵的(non-conjugate),而'运算符是作用于复共轭矩阵转置的。

    看看下面的例子


    >>a = rand(3,5)+i*rand(3,5)


    a =


       0.4039 + 0.6477i   0.9421 + 0.2963i   0.0598 + 0.6868i   0.8212 + 0.6256i   0.1690 + 0.9294i
       0.0965 + 0.4509i   0.9561 + 0.7447i   0.2348 + 0.1835i   0.0154 + 0.7802i   0.6491 + 0.7757i
       0.1320 + 0.5470i   0.5752 + 0.1890i   0.3532 + 0.3685i   0.0430 + 0.0811i   0.7317 + 0.4868i

    >> b = a'


    b =


       0.4039 - 0.6477i   0.0965 - 0.4509i   0.1320 - 0.5470i
       0.9421 - 0.2963i   0.9561 - 0.7447i   0.5752 - 0.1890i
       0.0598 - 0.6868i   0.2348 - 0.1835i   0.3532 - 0.3685i
       0.8212 - 0.6256i   0.0154 - 0.7802i   0.0430 - 0.0811i
       0.1690 - 0.9294i   0.6491 - 0.7757i   0.7317 - 0.4868i


    >> b2 = a.'


    b2 =


       0.4039 + 0.6477i   0.0965 + 0.4509i   0.1320 + 0.5470i
       0.9421 + 0.2963i   0.9561 + 0.7447i   0.5752 + 0.1890i
       0.0598 + 0.6868i   0.2348 + 0.1835i   0.3532 + 0.3685i
       0.8212 + 0.6256i   0.0154 + 0.7802i   0.0430 + 0.0811i
       0.1690 + 0.9294i   0.6491 + 0.7757i   0.7317 + 0.4868i


    是不是有区别了?其实很多初学者用惯了',不怎么用.',如果运算在实数域上,是没问题,如果是复数域,这样的错误,又有几人能检查得出来呢?


    方法二:transpose函数和ctranspose函数

    transpose函数类似于 .’ 运算符,而ctranspose函数类似于 ' 运算符

    matlab的运算符可以理解成函数的一种调用方式,比如你在执行a+b的时候,其实matlab内部调用的是plus(a,b)这个函数。

    这里的transpose也是这种意思,在碰到 a.' 运算时,matlab就调用transpose(a)去计算这个 .' 运算符


    方法三:permute与ipermute函数

    permuter用于多维矩阵的转置,ipermute是其逆函数,虽然编程里面的函数与数学意义上的函数不同,但这里逆的概念是一致的。

    列举permute与ipermute的例子如下


    >>a = cat(3,eye(2),2*eye(2),3*eye(2))


    a(:,:,1) =


         1     0
         0     1




    a(:,:,2) =


         2     0
         0     2




    a(:,:,3) =


         3     0
         0     3

    >>B = permute(a,[3 2 1])


    B(:,:,1) =


         1     0
         2     0
         3     0




    B(:,:,2) =


         0     1
         0     2
         0     3

    >>C = ipermute(B,[3 2 1])

    C(:,:,1) =


         1     0
         0     1




    C(:,:,2) =


         2     0
         0     2




    C(:,:,3) =


         3     0
         0     3

    可以看到,C和a是一样的。


    Tips:先前有没有提到,转置操作同样适用于元胞数组呢?

    >> a = cell(3,5)


    a = 


        []    []    []    []    []
        []    []    []    []    []
        []    []    []    []    []


    >> a'


    ans = 


        []    []    []
        []    []    []
        []    []    []
        []    []    []
        []    []    []


    The end

    关注NewCloudTech微博,每日更新编程知识用法,提高编程水
    平,就从关注NewCloudTech开始!
  • 相关阅读:
    BZOJ1610: [Usaco2008 Feb]Line连线游戏
    BZOJ4554: [Tjoi2016&Heoi2016]游戏
    BZOJ3174: [Tjoi2013]拯救小矮人
    BZOJ3192: [JLOI2013]删除物品
    BZOJ3156: 防御准备
    BZOJ3875: [Ahoi2014&Jsoi2014]骑士游戏
    BZOJ 1597: [Usaco2008 Mar]土地购买
    洛谷 P3375 【模板】KMP字符串匹配
    洛谷 P3370 【模板】字符串哈希
    BZOJ 1083 繁忙的都市
  • 原文地址:https://www.cnblogs.com/riskyer/p/3357946.html
Copyright © 2020-2023  润新知