数学建模社区-数学中国

标题: R语言入门基础之矩阵 [打印本页]

作者: 数模天下    时间: 2012-12-24 14:04
标题: R语言入门基础之矩阵

矩阵(matrix)

矩阵生成函数matrix():matrix(data, nrow = , ncol = , byrow = F),其中,数据data是必须的,其他都是选择参数,可以不选。byrow = F默认为按列来排列数据,如果想要按行排列,令byrow = T。
7 Z: W9 R0 Q. I1、对角矩阵和单位阵。
1 t( D3 O- `/ u5 h; v% @+ \+ t例1:x <- 1:6; diag(x) #对角矩阵% a3 T! q. _5 m9 v/ n+ a3 W! |
例2:y <- rep(1, 5); diag(y) #单位阵
) @6 _  u) w" C0 {. U% y; _. _" L1 Z2 g# z" ^$ P" H
2、矩阵下标+ L0 n7 r. O4 H$ B; x
例1:xx <- matrix(1:20, 4, 5)4 X- |) R3 M$ X
xx[2, 2]; xx[2, 3:5]; xx[3:4, 3:4]
& I3 _: P% |" g/ K0 R. @; x5 ^& Dxx[2, ]; xx[ , 2]0 H5 T  b' {, m  V) t' m$ k
9 I, k% K$ _' }2 d, T5 `0 d
3、代数意义下的矩阵乘法"%*%"
" k' m0 s/ f- ]! M2 G5 c例1:yy <- matrix(1:6, 3, 2); zz <- matrix(1:6, 2, 3)
0 M5 t2 h+ Z( xyy %*% zz; zz %*% yy4 z" ^# i8 [) k, c5 q3 e0 L

  J( K& `4 x8 |. G- L4、矩阵行和列的维数
! x% ~# M+ @, k例1:xx <- matrix(1:20, 4, 5)/ |6 N5 d( A; B$ _2 T7 X
dim(xx) #行和列的维数
6 D$ @, G. l3 m* d9 P5 Xnrow(xx); ncol(xx) #行数和列数
; b# Q  K4 C7 W2 w# E
7 p/ r1 O2 P9 f5 y/ s5、矩阵的主要运算函数
4 J/ g# [. ^7 d: n0 U例1:x <- 1:6; y <- as.matrix(x) #转换成矩阵
$ y: V" J' U% }3 Q: [is.matrix(x); is.matrix(y) #判断是否矩阵! c- r: x# [' {0 ~0 ?
例2:   diag() #方阵对角线元素或者生成对角矩阵
- z1 a7 ^) o+ O& V: X0 T+ j  t& Papply() #对矩阵应用函数
0 o6 W2 ]7 u7 L* i! zeigen() #求特征值和特征向量8 I7 Q$ Y  R. x
solve() #求逆矩阵
8 T; x2 v6 k/ @3 Uchol() #Choleski分解3 @0 v; w3 K+ L4 g
svd() #奇异值分解2 H4 m+ i+ A" S: A3 s' P7 {' X
qr() #QR分解
) H5 c! \& q9 |5 Z* cdet() #求行列式  _/ x' r- @; p% C2 z/ d* x2 o
dim() #给出行列数
" F( @) `5 q! R# t& ?+ z8 Wt() #矩阵转置
9 n/ c' i$ W* w6 D4 z# ~
0 V+ ^2 X+ s' F5 l& S6、矩阵合并# s  b; g8 ~( K0 R
例1:aa <- matrix(1:6, 3, 2);  bb <- matrix(7:12, 3, 2)
% x. Z9 q% M' |& ?3 t: Vcbind(aa, bb) #按列合并! n* L4 I/ }' s' t3 Y# o
rbind(aa, bb) #按行合并* W6 J4 [2 K" F$ i0 m1 ^9 _

0 G: |3 E: O- `3 ~7、矩阵apply()运算函数:语法是apply(data, dim, function),dim取1表示对行运用函数,取2表示对列运用函数。- c0 I$ O) ?1 c) Q6 o1 Q9 N4 ]* w8 d" V% `
例1:xx <- matrix(1:20, 4, 5)& A* o8 z9 l5 p+ {" h
colMeans(xx) #列均值
6 Q& x4 k& G+ [2 bcolSums(xx) #列和* c5 {( M# y1 L. Z$ z) f
其余大部分都要用到apply()函数
. Y  w$ Y; u+ v例2:xx <- matrix(1:20, 4, 5)
7 m( W) ^! t$ X" T. Rapply(xx, 2, mean) #列均值,等同于colMeans(xx)
2 H+ b( C( F6 Q; s( d; a7 R. lapply(xx, 2, sum) #列和,等同于colMeans(xx),所以矩阵行和列的运算推荐用apply()。
( W8 @4 d' d7 Z0 y" Oapply(xx, 1, var) #行方差
5 \; y2 z% ]+ u4 F! Sapply(xx, 2, max) #每列最大值
* @4 Y3 [! _3 i% happly(xx, 2, rev) #每列的数反排列* O' e0 b- s7 ~2 D/ _
/ M! y7 D# V$ D$ o, ~  R! B9 I
! ^+ O' }* `; l5 D! ?% ]* q





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5