zoukankan      html  css  js  c++  java
  • [置顶] [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开始!
  • 相关阅读:
    codevs 1115 开心的金明
    POJ 1125 Stockbroker Grapevine
    POJ 2421 constructing roads
    codevs 1390 回文平方数 USACO
    codevs 1131 统计单词数 2011年NOIP全国联赛普及组
    codevs 1313 质因数分解
    洛谷 绕钉子的长绳子
    洛谷 P1276 校门外的树(增强版)
    codevs 2627 村村通
    codevs 1191 数轴染色
  • 原文地址:https://www.cnblogs.com/riskyer/p/3357946.html
Copyright © 2011-2022 走看看