数学建模社区-数学中国

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

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

矩阵(matrix)

矩阵生成函数matrix():matrix(data, nrow = , ncol = , byrow = F),其中,数据data是必须的,其他都是选择参数,可以不选。byrow = F默认为按列来排列数据,如果想要按行排列,令byrow = T。
5 G( f" t' c. Q/ c3 u5 H4 O1、对角矩阵和单位阵。
/ t- a7 W4 |0 Z& _# @0 ~" ?6 E例1:x <- 1:6; diag(x) #对角矩阵0 N/ X! i; c" z. s. W1 h6 w! p7 b: `: p
例2:y <- rep(1, 5); diag(y) #单位阵) `+ v! V7 w8 A- \1 C& j

1 M' o2 ~+ ^7 ]* ^2、矩阵下标
( p& j( h: K6 u$ P例1:xx <- matrix(1:20, 4, 5)$ r, l+ Q- a4 l: a
xx[2, 2]; xx[2, 3:5]; xx[3:4, 3:4]
: E$ z: f. x6 R2 b0 \xx[2, ]; xx[ , 2]+ [/ L0 z2 g5 F2 f/ ?- D, v; l4 N4 ^
0 C$ t) V  [" d4 j8 O% i
3、代数意义下的矩阵乘法"%*%"
" f3 {: S& g# \例1:yy <- matrix(1:6, 3, 2); zz <- matrix(1:6, 2, 3)4 T9 X/ P, f8 w
yy %*% zz; zz %*% yy
. }% p" r" w1 l8 g/ v
" y$ w# a& t9 r7 t4、矩阵行和列的维数8 y5 n' r( q1 V6 n7 L9 F: ?
例1:xx <- matrix(1:20, 4, 5)2 Y, P. K* h8 y2 c& G
dim(xx) #行和列的维数9 |+ v9 V# N/ F2 g
nrow(xx); ncol(xx) #行数和列数. R% O6 |; w6 a& @4 p8 R2 v- A* K7 q: x

$ }$ o3 a* ?  f5、矩阵的主要运算函数
, i2 O5 C/ B! ?' T5 p例1:x <- 1:6; y <- as.matrix(x) #转换成矩阵
( I  O$ T2 a4 \. lis.matrix(x); is.matrix(y) #判断是否矩阵: e$ e& z1 q2 t* G; u, _/ m
例2:   diag() #方阵对角线元素或者生成对角矩阵, C2 M) o! Y& ^6 C$ }5 ^0 d
apply() #对矩阵应用函数
; K' g8 J: _5 u% [) h# seigen() #求特征值和特征向量* g3 p: V( I: {8 N
solve() #求逆矩阵
4 u0 V- v2 ?0 N4 Z) N8 f! @chol() #Choleski分解1 r$ p) u3 |2 B9 j
svd() #奇异值分解, H- [% X$ Q: A2 ?  O
qr() #QR分解: T7 ~( O4 P% r; u: Y% d  j5 y8 x
det() #求行列式4 o# {) E1 i. ^! B# h
dim() #给出行列数5 {. [# c" w7 _+ T
t() #矩阵转置
; B. `, o" E3 `, q" m+ p
" V1 x) D3 @' D9 H) {3 N, ]- G1 T+ ~6、矩阵合并0 z: `  S1 Q- z6 O
例1:aa <- matrix(1:6, 3, 2);  bb <- matrix(7:12, 3, 2)
* s2 n0 S% ?& {1 D: A6 Icbind(aa, bb) #按列合并
, Q: J' Q6 R& [$ o6 V4 W* ?, }rbind(aa, bb) #按行合并+ U9 V8 h4 Z0 D' s+ E/ f
# B2 R1 h% n* ?; @
7、矩阵apply()运算函数:语法是apply(data, dim, function),dim取1表示对行运用函数,取2表示对列运用函数。
- z2 E7 Z' y8 b: e( D& F例1:xx <- matrix(1:20, 4, 5)1 H* r" i. I! k. P& `
colMeans(xx) #列均值
7 A  f) ^2 I% |8 F9 r+ UcolSums(xx) #列和
4 C* _1 e+ Y' S其余大部分都要用到apply()函数
5 V( p7 T/ y7 i# C- ~% e- ~& @. P* c例2:xx <- matrix(1:20, 4, 5). S; L8 N% [$ h: x$ ]9 A. u4 f1 k5 T
apply(xx, 2, mean) #列均值,等同于colMeans(xx)
8 H$ C5 U; o) O1 y* A# z; Y0 k6 Happly(xx, 2, sum) #列和,等同于colMeans(xx),所以矩阵行和列的运算推荐用apply()。$ _3 a( z, ]1 `- X; R
apply(xx, 1, var) #行方差5 r+ s% B0 M, W+ H0 f
apply(xx, 2, max) #每列最大值# E3 B+ D3 e- R- e, t
apply(xx, 2, rev) #每列的数反排列
; w- l% a; h/ z" Y
7 t& i% X* a7 Z, e! a$ T4 v; ]
9 l* A' S$ I* I1 |* P1 O2 y( L




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