- 在线时间
- 27 小时
- 最后登录
- 2013-5-20
- 注册时间
- 2012-11-2
- 听众数
- 15
- 收听数
- 1
- 能力
- 0 分
- 体力
- 3870 点
- 威望
- 0 点
- 阅读权限
- 60
- 积分
- 1335
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 347
- 主题
- 320
- 精华
- 0
- 分享
- 0
- 好友
- 6
升级   33.5% TA的每日心情 | 奋斗 2013-6-15 16:58 |
|---|
签到天数: 24 天 [LV.4]偶尔看看III
 群组: 第四届数学中国美赛实 |
|
矩阵(matrix) 矩阵生成函数matrix():matrix(data, nrow = , ncol = , byrow = F),其中,数据data是必须的,其他都是选择参数,可以不选。byrow = F默认为按列来排列数据,如果想要按行排列,令byrow = T。
8 I" [) T" t" P- e' X o1、对角矩阵和单位阵。
9 ^9 e* D+ K2 u/ s& F4 A例1:x <- 1:6; diag(x) #对角矩阵# r' y5 o4 A7 V( r2 h8 L* f
例2:y <- rep(1, 5); diag(y) #单位阵$ I1 U& I) i. ?, Z
8 x8 M) o H. i) t5 B- x
2、矩阵下标
" L5 k2 X$ P4 `; S' A% D% h例1:xx <- matrix(1:20, 4, 5)
/ M) w. d; v0 c9 G; I" Q1 xxx[2, 2]; xx[2, 3:5]; xx[3:4, 3:4]
4 S# C* I; l; i/ z4 W# ?xx[2, ]; xx[ , 2]
6 f4 T: h$ z* G4 \& x& t5 x# C2 k$ j3 z$ G
3、代数意义下的矩阵乘法"%*%"
9 w4 ]; h7 X9 X例1:yy <- matrix(1:6, 3, 2); zz <- matrix(1:6, 2, 3)
# b; l f' J+ c- }, Dyy %*% zz; zz %*% yy" {" F; I1 Z0 t J3 H0 P9 x1 n9 ^8 K
8 D, c) J" \( _; b0 a, J
4、矩阵行和列的维数
8 r1 x" j* H, u0 ?6 D$ w例1:xx <- matrix(1:20, 4, 5)
5 P0 P6 F4 B `9 s. ?dim(xx) #行和列的维数0 S8 j: ^1 }6 F* N: U
nrow(xx); ncol(xx) #行数和列数& w9 }. A! c8 i: S# l( ]# A2 @1 N
. o4 `& P. i# s# ^$ z- ?
5、矩阵的主要运算函数
& B- O% j' i7 a9 J) W# i: o例1:x <- 1:6; y <- as.matrix(x) #转换成矩阵
+ S( T! ~6 k1 t& [7 f6 P# a3 y+ T: Y7 y( vis.matrix(x); is.matrix(y) #判断是否矩阵5 m& F/ q6 T* q( f
例2: diag() #方阵对角线元素或者生成对角矩阵& A/ K. ]/ ~+ v Q3 z. s# i% L
apply() #对矩阵应用函数
9 J) ?# p% J! @/ U* j& S$ N aeigen() #求特征值和特征向量! f- @% q2 k# _8 q9 O1 W. m, }9 j
solve() #求逆矩阵, g5 _9 c8 @+ T/ S6 a. W) o- v6 ?7 v
chol() #Choleski分解2 A" U( T% o y( r [3 _
svd() #奇异值分解
+ }( b9 y) f- z7 yqr() #QR分解/ X) @* C1 Z$ i- P v9 {
det() #求行列式! C) q1 B1 F, m# n
dim() #给出行列数' q7 B/ w k3 c3 @
t() #矩阵转置- a) [ r) r2 }; i8 N7 H+ c
; z: @& B/ f8 c; T: b
6、矩阵合并
0 p" [9 B9 j; H% [- k T例1:aa <- matrix(1:6, 3, 2); bb <- matrix(7:12, 3, 2)1 p8 ]/ D" k+ q1 Z' J1 r6 U
cbind(aa, bb) #按列合并# }8 q @& m* r( |! `' p8 T
rbind(aa, bb) #按行合并
; w/ z" N+ X9 A% I$ r! R; H% m& M2 F) A9 Z
7、矩阵apply()运算函数:语法是apply(data, dim, function),dim取1表示对行运用函数,取2表示对列运用函数。0 z; A) C$ j, M9 l. E7 ?& k
例1:xx <- matrix(1:20, 4, 5)7 q$ t3 o0 R$ K$ P8 ?* f8 D7 [
colMeans(xx) #列均值
$ L( Z1 w3 s, w& C+ HcolSums(xx) #列和6 R% C% U2 k3 W* R4 {6 ?+ q
其余大部分都要用到apply()函数
% F5 a% e V: f! T: O例2:xx <- matrix(1:20, 4, 5)
. c8 d2 c- G0 V+ m0 b" g- xapply(xx, 2, mean) #列均值,等同于colMeans(xx)
: N7 f* p' [: L. F9 H* }apply(xx, 2, sum) #列和,等同于colMeans(xx),所以矩阵行和列的运算推荐用apply()。
6 T% `; ~/ U* Uapply(xx, 1, var) #行方差1 Y2 R$ S( W J& g
apply(xx, 2, max) #每列最大值
! `1 ^1 q0 L' Q6 bapply(xx, 2, rev) #每列的数反排列' E$ k$ k; D3 s( E% |
; Y1 E1 i+ `- U' g% R. {# C# ^. j h. s* T, j
|
zan
|