- 在线时间
- 27 小时
- 最后登录
- 2013-5-20
- 注册时间
- 2012-11-2
- 听众数
- 15
- 收听数
- 1
- 能力
- 0 分
- 体力
- 3870 点
- 威望
- 0 点
- 阅读权限
- 60
- 积分
- 1335
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 347
- 主题
- 320
- 精华
- 0
- 分享
- 0
- 好友
- 6
升级   33.5% TA的每日心情 | 奋斗 2013-6-15 16:58 |
|---|
签到天数: 24 天 [LV.4]偶尔看看III
 群组: 第四届数学中国美赛实 |
|
矩阵(matrix) 矩阵生成函数matrix():matrix(data, nrow = , ncol = , byrow = F),其中,数据data是必须的,其他都是选择参数,可以不选。byrow = F默认为按列来排列数据,如果想要按行排列,令byrow = T。
: n! D; J/ A+ s1 `1、对角矩阵和单位阵。
) ]/ O* b2 w( U& _+ K例1:x <- 1:6; diag(x) #对角矩阵
* G1 x8 e- _% B. \. N例2:y <- rep(1, 5); diag(y) #单位阵
( g# D( g/ t# T7 z' @% b8 O- i6 z- r% z% b9 M8 }
2、矩阵下标. g% [, E2 v1 v
例1:xx <- matrix(1:20, 4, 5); B$ r( H V7 w0 @0 i
xx[2, 2]; xx[2, 3:5]; xx[3:4, 3:4]
. P& n+ q5 w, r1 |+ qxx[2, ]; xx[ , 2]% @% d* O6 j) X; L$ e
* C8 Z- e; k( R5 R; L- a% }3、代数意义下的矩阵乘法"%*%"& p5 }0 n. J% }- c4 g
例1:yy <- matrix(1:6, 3, 2); zz <- matrix(1:6, 2, 3). Z- X. s" L# ?0 i9 H c( k
yy %*% zz; zz %*% yy0 ^* h$ Q+ l- Z& O( j: ]% N9 Q3 K
3 y2 [) m% Q. {7 [
4、矩阵行和列的维数* w! o+ a+ c- T I
例1:xx <- matrix(1:20, 4, 5)- H) J+ f3 d2 o6 n a) F
dim(xx) #行和列的维数
/ k) W2 T' b4 o+ f( I* {$ Hnrow(xx); ncol(xx) #行数和列数, P& E; I0 F x/ f6 b% o
h1 W6 L' P9 ?6 l& C9 A
5、矩阵的主要运算函数
0 }4 }( |! D: q0 f H/ v$ w) y例1:x <- 1:6; y <- as.matrix(x) #转换成矩阵1 a6 c" @) J# O$ N. [) y& C- b
is.matrix(x); is.matrix(y) #判断是否矩阵# M4 b) r" ^. K5 }
例2: diag() #方阵对角线元素或者生成对角矩阵
/ ?3 E0 O+ y" Q( }! yapply() #对矩阵应用函数
, Q: G8 s/ p, P5 ^9 u5 | j6 P4 jeigen() #求特征值和特征向量5 T( o! ?5 C1 V5 l: r) ~
solve() #求逆矩阵
1 i0 n& U/ n& \( H2 D* ~/ L& h% Dchol() #Choleski分解
C# q3 @5 T) t: csvd() #奇异值分解. a; E y x( A
qr() #QR分解
- V% ^2 |/ x& g9 _% L2 Kdet() #求行列式
) ?8 }0 f2 `8 u9 U- o# ^( idim() #给出行列数! G+ k0 @9 S! o z0 Y# H2 u6 z
t() #矩阵转置6 ~% z4 O# q5 D$ J: s0 ^; X
: O N* }$ o. D: k/ r. p6、矩阵合并8 g! e8 d( H5 r- q% H2 o. i0 D" ^
例1:aa <- matrix(1:6, 3, 2); bb <- matrix(7:12, 3, 2)% i6 p( a/ h* c7 D( T" l2 U7 _6 |
cbind(aa, bb) #按列合并0 ?% F9 x2 u+ b' [) A
rbind(aa, bb) #按行合并
# I0 d1 F( J7 y# b9 F* _, }- k& Q0 G1 g5 S6 T( a% ^. z4 D0 j
7、矩阵apply()运算函数:语法是apply(data, dim, function),dim取1表示对行运用函数,取2表示对列运用函数。
9 c( N7 v: X' c: U+ a例1:xx <- matrix(1:20, 4, 5)
8 e1 W5 o2 Q) T4 B6 i, ]colMeans(xx) #列均值3 O; T( F5 a3 F) X+ d- D
colSums(xx) #列和
1 B6 @/ D: K! p' @其余大部分都要用到apply()函数/ Q+ p) d/ L' Y: b
例2:xx <- matrix(1:20, 4, 5)% n2 [( Z( h+ V! ^6 J# u3 S9 @' T
apply(xx, 2, mean) #列均值,等同于colMeans(xx)3 j1 C' d9 l4 x- S2 G
apply(xx, 2, sum) #列和,等同于colMeans(xx),所以矩阵行和列的运算推荐用apply()。
- ~4 X. U: ]" [apply(xx, 1, var) #行方差/ k0 q5 v- z% b* n4 y0 H
apply(xx, 2, max) #每列最大值2 V! u# f- [7 d9 b. w0 ^3 N- a M
apply(xx, 2, rev) #每列的数反排列
1 |7 G5 B. r2 G! I6 \( j* D! g' }% Z8 `$ c7 t b% W9 _* s% @
* [, X! w2 V7 k( w! }* t
|
zan
|