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

[置顶] [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) 编辑收藏举报