数学建模社区-数学中国
标题:
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 O
1、对角矩阵和单位阵。
/ 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 t
4、矩阵行和列的维数
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* ? f
5、矩阵的主要运算函数
, i2 O5 C/ B! ?' T5 p
例1:x <- 1:6; y <- as.matrix(x) #转换成矩阵
( I O$ T2 a4 \. l
is.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# s
eigen() #求特征值和特征向量
* 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 I
cbind(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+ U
colSums(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 H
apply(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