• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[置顶] [MATLAB技术贴]漫谈MATLAB矩阵转置 - you Richer

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

[置顶] [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开始!

 

 

 

posted on 2013-10-08 21:34  you Richer  阅读(905)  评论(0编辑  收藏  举报

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap