3 d& W. `9 V. ~. I& z2 m/ k0 U使用diag这种思路的另一个应用: 4 c1 D) `/ T/ O& B
A=rand(8)%生成一个随机矩阵; 7 c. q$ {( m: r$ `! l' e8 k/ X
[a,b]=min(A)%得到A中每列最小的元素组成的数组a,a对应元素的列索引组成的数组b; 1 d V5 d2 G4 O1 |% t我们想要通过数组b和矩阵A输出a: * N( Y0 a6 i" M. Z
c=size(b,2)%size(b)是一个数组,显示了数组b的行数和列数,size(b,2)能够得到数组b的列数; " m' m! N% D& @- R
D=A(1:c,b(1:end))%1:c恰好是b中所含元素的个数,在这里代表A中的行,b(1:end)是A中的列; ! e$ s/ g1 e; P; M) a! u+ I; O+ Zdiag(D)%观察矩阵D可知,这个矩阵输出了很多我们不需要的内容,我们只需要D中对角线上的元素,运行diag函数所得结果即得。 1 a0 O) l4 q$ \3 y
+ K! w' y( d* e另一种简便方法: ( Z; f8 w& ]+ j; h2 j1 S
A=rand(8) %生成一个随机矩阵; " B$ K! u' o p3 t4 R, E
a=A>0.5%使用一个逻辑矩阵a,得到A中所有大于0.5的元素的坐标; V6 q5 J( |1 LA(a)即可得到A中所有大于0.5的元素。 , L5 r; Q1 Y6 t18、一些特殊函数 4 ^' h& e) B$ d
1、 上下翻转矩阵A:flipud(A)---------------联想记忆:flip+up+down flip:翻转 : i; s, E7 O/ e' F5 q, C
2、 左右反转矩阵A:fliplr(A)---------------联想记忆:flip+left+right 3 l% d* D" _1 g8 x8 l' x3、 将矩阵A逆时针旋转90度的n倍:rot90(A,n)-----------联想记忆:rot+90 rotate:旋转 $ T" w9 ~1 T8 n4 b. y v6 l4、 循环移动行和列:circshift(A,[m n])向下移动m行,向右移动n列,若只有行的移动时,可以输入circshift(A,m),若只有列的移动时,只能是circshift(A,[0 n]) , a$ B) _& y- v2 w9 o- Y
5、 只保留矩阵A的上三角形部分:triu(A)----------联想记忆:tri+up ' D! a# o' L, j( l9 s6、 只保留矩阵A的下三角形部分:tril(A)-----------联想记忆:tri+left 8 r3 x6 j/ Z0 Z6 U
7、 只保留矩阵A的对角线部分:diag(diag(A))---------第一次得到A的对角线元素,第二次有对角线元素生成一个对角线矩阵; ) }2 h& v( y/ O6 s/ u& N8、 分块矩阵:[A A A;A A A;A A A]会得到一个由小矩阵A拼成的大矩阵: 6 l, H$ I4 ?7 g( h. W+ i! O9 h) @
A A A 8 [4 ?; w9 o. R0 S
A A A R! \, p: T E$ `A A A ( U: ?0 r0 i, h
当然,每一个小块可以由符合条件的B C D……构成 # X" k0 F: I* R) N w
[A A A;A A A;A A A]还可以由复制函数repmat得到,即repmat(A,3,3)或repmat(A,[3 3]) 7 W' C4 ]! {1 U2 `" e
9、 在计算机看来,一个矩阵除了有数据,还有形状,把形状拿来用(size函数),数字丢掉,对计算机来说,不是什么不好意思的事情: 3 E$ c' P* b) A( ? E; i5 r
- f" s% K! h: Y! Z8 q例1: 7 w- {5 J$ P# y) X iA=reshape(1:15,3,5)%将数组[1……15]变为一个3行5列的矩阵 7 P; M0 L+ d* JB=ones(size(A))%由矩阵A的形状,创建一个相同形状的单位矩阵 / o, z" Q( A H
Pi*B%得到一个全部由pi组成的,且形状与矩阵A相同的一个矩阵 * c- F( v5 P) w8 B9 a1 S例2:(复制函数repmat) 2 O( L J0 Y0 ^3 GA=reshape(1:15,3,5)%将数组[1……15]变为一个3行5列的矩阵 + M v# Q( W1 ^% R( [+ t
B=repmat(pi,size(A))%使用复制函数直接得到例1中的结果:全部由pi构成,且形状与A相同的矩阵 % W% H! T! I* G! o5 T; h3 p3 Y 2 ^. i6 X- d8 E$ bsize(A)相当于一个向量,返回矩阵A的行数和列数;注意:空矩阵有可能行数不为0或列数不为0; * X, Q0 G# B1 Q7 q& E
length(A)几乎相当于max(size(A)),它得到的是矩阵A的行数和列数中较大的那一个,但是当矩阵A为空数组时,length(A)返回值为0; 0 G3 U3 T' O& h6 J& Q9 b
numel(A)返回的是A中所含元素的总数,相当于size(A,1)*size(A,2); 3 e' e# F7 l+ ^: i# }1 g