数学建模社区-数学中国
标题:
R语言入门基础之矩阵
[打印本页]
作者:
数模天下
时间:
2012-12-24 14:04
标题:
R语言入门基础之矩阵
矩阵(matrix)
矩阵生成函数matrix():matrix(data, nrow = , ncol = , byrow = F),其中,数据data是必须的,其他都是选择参数,可以不选。byrow = F默认为按列来排列数据,如果想要按行排列,令byrow = T。
4 j W- ^8 v+ i: @* E* w
1、对角矩阵和单位阵。
5 l- z3 N" m# l4 i6 ?
例1:x <- 1:6; diag(x) #对角矩阵
4 U4 j0 z+ _/ z
例2:y <- rep(1, 5); diag(y) #单位阵
; S% ] l0 S- o4 h P& z0 x& h$ S
- S/ a& i* a: S, o7 j8 q+ N
2、矩阵下标
2 H7 g/ [9 M. m9 T1 {3 F
例1:xx <- matrix(1:20, 4, 5)
, z! H/ e& W& n
xx[2, 2]; xx[2, 3:5]; xx[3:4, 3:4]
* W! m3 ^" z9 Z
xx[2, ]; xx[ , 2]
& S* M9 E7 [0 U. j; A+ u" \$ F: s
o3 C1 M- n! H1 _8 F1 x
3、代数意义下的矩阵乘法"%*%"
0 Q' c) {# V6 H2 Z+ I$ }
例1:yy <- matrix(1:6, 3, 2); zz <- matrix(1:6, 2, 3)
0 b3 c! a* Z" W* @
yy %*% zz; zz %*% yy
9 [4 ?( | i! T$ Y2 s
6 o( q- H& `% R7 y, ]
4、矩阵行和列的维数
. \8 I& q6 `6 j- o; d$ u
例1:xx <- matrix(1:20, 4, 5)
5 n* A5 p! R( N
dim(xx) #行和列的维数
! o% e' l7 Z t' I$ b
nrow(xx); ncol(xx) #行数和列数
6 J, D5 _3 X# T
% x" o# c/ x8 }: u9 y. P3 s8 x
5、矩阵的主要运算函数
9 O* O2 N+ h& {5 Z& y v. x
例1:x <- 1:6; y <- as.matrix(x) #转换成矩阵
% E1 P, ^; x! s( B
is.matrix(x); is.matrix(y) #判断是否矩阵
! i* ?, N% l7 x/ `, e" ?
例2: diag() #方阵对角线元素或者生成对角矩阵
, r, u! S/ y( N3 }; [
apply() #对矩阵应用函数
0 B* q& [, _! b, w
eigen() #求特征值和特征向量
8 Z" a+ D' z; E. b, s* S
solve() #求逆矩阵
% Y6 p2 M) j8 i: u/ s0 N% g
chol() #Choleski分解
8 k- q! F& F/ t% x
svd() #奇异值分解
/ o* R5 I6 c* O
qr() #QR分解
$ f5 b( R2 U" N9 z+ q
det() #求行列式
0 u9 |$ G# Q( H& F. u
dim() #给出行列数
; D' _1 l4 w( X! I
t() #矩阵转置
7 n) V+ K8 b! u
% a( }/ l; ]2 Z. n
6、矩阵合并
, B9 e3 S. s8 h+ C- `
例1:aa <- matrix(1:6, 3, 2); bb <- matrix(7:12, 3, 2)
1 \/ z0 ]' ^% j9 \& s, Z4 K" ]
cbind(aa, bb) #按列合并
8 J( R2 z4 P2 T; I% Z- r: r# Z$ I* z; I
rbind(aa, bb) #按行合并
- \; J7 T! j! b3 _
+ o L9 |3 e5 p# A
7、矩阵apply()运算函数:语法是apply(data, dim, function),dim取1表示对行运用函数,取2表示对列运用函数。
9 K. D6 b7 C0 q, x0 q& k$ W
例1:xx <- matrix(1:20, 4, 5)
7 p% A; P3 j) j* M1 Q( k
colMeans(xx) #列均值
1 }9 s/ ?: y9 u D: @2 i& `: u4 u
colSums(xx) #列和
1 T* }, G' I( @( I" o
其余大部分都要用到apply()函数
5 |: ]4 v, b8 ?8 i( D# ` [
例2:xx <- matrix(1:20, 4, 5)
, J# i2 J4 b: Z
apply(xx, 2, mean) #列均值,等同于colMeans(xx)
3 T$ ~" M) e' _2 k
apply(xx, 2, sum) #列和,等同于colMeans(xx),所以矩阵行和列的运算推荐用apply()。
, [' b: S( G( F1 k' H8 j8 U
apply(xx, 1, var) #行方差
+ f" L) S7 s; y% o
apply(xx, 2, max) #每列最大值
1 `2 N) l& e* [4 C( |
apply(xx, 2, rev) #每列的数反排列
0 e( f1 h& `/ V
: E. E) f3 ^* g
! S. n- s$ @7 v: s0 x* k8 V8 S+ T( h/ A
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5