数学建模社区-数学中国

标题: 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* w1、对角矩阵和单位阵。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+ N2、矩阵下标
2 H7 g/ [9 M. m9 T1 {3 F例1:xx <- matrix(1:20, 4, 5)
, z! H/ e& W& nxx[2, 2]; xx[2, 3:5]; xx[3:4, 3:4]
* W! m3 ^" z9 Zxx[2, ]; xx[ , 2]
& S* M9 E7 [0 U. j; A+ u" \$ F: s
  o3 C1 M- n! H1 _8 F1 x3、代数意义下的矩阵乘法"%*%"
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( Ndim(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 x5、矩阵的主要运算函数9 O* O2 N+ h& {5 Z& y  v. x
例1:x <- 1:6; y <- as.matrix(x) #转换成矩阵
% E1 P, ^; x! s( Bis.matrix(x); is.matrix(y) #判断是否矩阵! i* ?, N% l7 x/ `, e" ?
例2:   diag() #方阵对角线元素或者生成对角矩阵, r, u! S/ y( N3 }; [
apply() #对矩阵应用函数
0 B* q& [, _! b, weigen() #求特征值和特征向量8 Z" a+ D' z; E. b, s* S
solve() #求逆矩阵
% Y6 p2 M) j8 i: u/ s0 N% gchol() #Choleski分解8 k- q! F& F/ t% x
svd() #奇异值分解
/ o* R5 I6 c* Oqr() #QR分解
$ f5 b( R2 U" N9 z+ qdet() #求行列式
0 u9 |$ G# Q( H& F. udim() #给出行列数; D' _1 l4 w( X! I
t() #矩阵转置7 n) V+ K8 b! u

% a( }/ l; ]2 Z. n6、矩阵合并
, 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; Irbind(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( kcolMeans(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: Zapply(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 Uapply(xx, 1, var) #行方差
+ f" L) S7 s; y% oapply(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