R語言科學(xué)計算
分類統(tǒng)計
- mean(),求平均值
- min()现柠,求最小值
- sd()裆赵,求標(biāo)準(zhǔn)差
數(shù)組和矩陣
數(shù)組與矩陣的維數(shù)
用dim函數(shù)來定義向量空間的維數(shù)。
例:
> my_num <- c(1:10)
> dim(my_num) <- c(2,5)
> my_num
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
切片
索引向量
array函數(shù)
array函數(shù)根據(jù)維數(shù)參數(shù)生成多維數(shù)組之剧,它的參數(shù)主要有兩個郭卫,第一個是需要形成數(shù)組元素的數(shù)據(jù),第二個是dim參數(shù)提示維度背稼。
例:
> h1 <- c(1:20)
> mya1 <- array(h1, dim=c(4,5))
> mya1
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
數(shù)組轉(zhuǎn)換為向量
as.vector函數(shù)可將數(shù)組轉(zhuǎn)換為向量贰军。
例:
> x4 <- array(c(1:10), dim=c(2,5))
> x4
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> as.vector(x4)
[1] 1 2 3 4 5 6 7 8 9 10
matrix矩陣
使用matrix函數(shù)可創(chuàng)建矩陣,主要參數(shù)為:data表示構(gòu)造所需數(shù)據(jù)蟹肘,nrow為行數(shù)词疼,ncol為列數(shù),byrow表示是否按行順序分配元素帘腹,默認(rèn)為FALSE寒跳。
例:
> matrix(c(1:10),2,5,TRUE)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
> matrix(c(1:10),2,5)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
對角矩陣
通過diag函數(shù)可生成和分析對角矩陣。如果參數(shù)為一維數(shù)組竹椒,則將參數(shù)視為對角線元素童太,并生成對角矩陣。
例:
> a1 = c(1:10)
> diag(a1)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 0 0 0 0 0 0 0 0 0
[2,] 0 2 0 0 0 0 0 0 0 0
[3,] 0 0 3 0 0 0 0 0 0 0
[4,] 0 0 0 4 0 0 0 0 0 0
[5,] 0 0 0 0 5 0 0 0 0 0
[6,] 0 0 0 0 0 6 0 0 0 0
[7,] 0 0 0 0 0 0 7 0 0 0
[8,] 0 0 0 0 0 0 0 8 0 0
[9,] 0 0 0 0 0 0 0 0 9 0
[10,] 0 0 0 0 0 0 0 0 0 10
數(shù)組運(yùn)算
數(shù)組四則運(yùn)算
+, -, * 運(yùn)算,每個元素分別進(jìn)行书释。
向量連接
向量連接指的是將兩個向量通過某種規(guī)律連接成一個數(shù)組翘贮。R語言的cbind和rbind函數(shù)可進(jìn)行向量連接。
概略地說爆惧,cbind() 把矩陣橫向合并成一個大矩陣(列方式)狸页,而rbind()
是縱向合并(行方式)。
在命令中
> X <- cbind(arg 1 , arg 2 , arg 3 , ...)
cbind() 的參數(shù)要么是任何長度的向量扯再,要么是列長度一致的的矩陣(即行數(shù)一樣)芍耘。結(jié)果將是一個合并arg1 , arg2 , . . . 的列形成的矩陣。
如果cbind() 的參數(shù)中有一些比其他矩陣參數(shù)的列長度短的向量熄阻,它們將會被循環(huán)使用以吻合矩陣的列長度(在沒有矩陣的情況下斋竞,吻合其中最長向量的長度)。
函數(shù)rbind() 對行進(jìn)行類似的操作秃殉。其中任何向量參數(shù)都會被當(dāng)作行向量且可能被循環(huán)使用坝初。
假定X1 和X2 有一樣的行數(shù)。下面的命令會把它們的列合并以得到矩陣X钾军,同時要求起始列都是1.
> X <- cbind(1, X1, X2)
rbind() 或者cbind() 返回值常常是矩陣形式鳄袍。因此,cbind(x)
和rbind(x)
可能是把向量x 分別轉(zhuǎn)換成列或者行矩陣最簡單的方法吏恭。
> x2 <- c(101:105)
> x1 <- c(1:10)
> cbind(x1,x2)
x1 x2
[1,] 1 101
[2,] 2 102
[3,] 3 103
[4,] 4 104
[5,] 5 105
[6,] 6 101
[7,] 7 102
[8,] 8 103
[9,] 9 104
[10,] 10 105
> rbind(x1,x2)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
x1 1 2 3 4 5 6 7 8 9 10
x2 101 102 103 104 105 101 102 103 104 105
矩陣運(yùn)算
矩陣連接
R語言的cbind函數(shù)完成矩陣的橫向連接拗小,rbind函數(shù)完成矩陣的縱向連接。
例:
> x3 <- matrix(c(1:10),2,5)
> x4 <- matrix(c(101:105),2,5)
> x3
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> x4
[,1] [,2] [,3] [,4] [,5]
[1,] 101 103 105 102 104
[2,] 102 104 101 103 105
> cbind(x3,x4)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 3 5 7 9 101 103 105 102 104
[2,] 2 4 6 8 10 102 104 101 103 105
> rbind(x3,x4)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
[3,] 101 103 105 102 104
[4,] 102 104 101 103 105
矩陣轉(zhuǎn)置
R語言的t函數(shù)可完成矩陣轉(zhuǎn)置計算
例:
> h <- c(1:10)
> array(h, dim=c(2,5)) -> mya
> mya
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> t(mya)
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
[4,] 7 8
[5,] 9 10
相對t函數(shù)而言樱哼,用aperm函數(shù)進(jìn)行矩陣轉(zhuǎn)置更靈活哀九。aperm有兩個常用的參數(shù),第一個參數(shù)是需要轉(zhuǎn)置的矩陣唇礁,第二個參數(shù)perm指示新矩陣相對于第一個參數(shù)矩陣的維度下標(biāo)勾栗。
比如,將行轉(zhuǎn)換為列盏筐,將列轉(zhuǎn)換為行围俘,將行列次序更換,將第一維的元素與第二維的元素互換琢融,則將perm設(shè)為c(2,1).
例:
> aperm(mya,perm=c(2,1)) -> myb
> myb
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
[4,] 7 8
[5,] 9 10
> mya1 <- array(mya,c(2,2,5))
> mya1
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
, , 3
[,1] [,2]
[1,] 9 1
[2,] 10 2
, , 4
[,1] [,2]
[1,] 3 5
[2,] 4 6
, , 5
[,1] [,2]
[1,] 7 9
[2,] 8 10
> myb1 <- aperm(mya1,perm=c(2,1,3))
> myb1
, , 1
[,1] [,2]
[1,] 1 2
[2,] 3 4
, , 2
[,1] [,2]
[1,] 5 6
[2,] 7 8
, , 3
[,1] [,2]
[1,] 9 10
[2,] 1 2
, , 4
[,1] [,2]
[1,] 3 4
[2,] 5 6
, , 5
[,1] [,2]
[1,] 7 8
[2,] 9 10
矩陣乘積
若A為mn矩陣界牡,B為nr矩陣,則它們的乘積AB(有時記做AB)會是一個mr的矩陣漾抬。矩陣乘積使用%*%操作符進(jìn)行計算宿亡。
例:
> a2 <- array(c(1:10),dim=c(2,5))
> b2 <- t(a2)
> a2 %*% b2
[,1] [,2]
[1,] 165 190
[2,] 190 220
內(nèi)積運(yùn)算
向量外積
向量的外積是矩陣的克羅內(nèi)克積的特殊情況,而克羅內(nèi)克積是張量積的一種特殊情況纳令。
> b1 <- array(c(1:4))
> a1 <- array(c(5:6))
> b1 %o% a1
[,1] [,2]
[1,] 5 6
[2,] 10 12
[3,] 15 18
[4,] 20 24
> a1 %o% b1
[,1] [,2] [,3] [,4]
[1,] 5 10 15 20
[2,] 6 12 18 24
> b2 <- array(c(1:4))
> a2 <- array(c(5:8))
> b2 %o% a2
[,1] [,2] [,3] [,4]
[1,] 5 6 7 8
[2,] 10 12 14 16
[3,] 15 18 21 24
[4,] 20 24 28 32
此外挽荠,還可以使用outer(a,b,'*')替代%o%運(yùn)算符進(jìn)行外積運(yùn)算.
向量內(nèi)積
向量內(nèi)積以實數(shù)R上定義的兩個向量為運(yùn)算對象克胳,返回一個實數(shù)標(biāo)量值,屬于二元運(yùn)算圈匆,它是歐基里得空間的標(biāo)準(zhǔn)內(nèi)積漠另。
R語言通過corssprod函數(shù)完成向量內(nèi)積運(yùn)算.
例:
> a3 <- c(1:3)
> b3 <- c(4:6)
> crossprod(a3,b3)
[,1]
[1,] 32
矩陣內(nèi)積
矩陣內(nèi)積的計算方式相當(dāng)于第一個參數(shù)的轉(zhuǎn)置乘以第二個參數(shù),就是前面提到的矩陣乘積跃赚。除了使用%*%操作符外笆搓,還可以使用crossprod函數(shù)完成矩陣內(nèi)積計算。
求解線性方程組
一般通過solve函數(shù)來求解 a %*% x = b中的x向量值纬傲。求解線性方程組僅使用solve函數(shù)的前兩個參數(shù)满败,第一個a為系統(tǒng)矩陣,第二個b為常數(shù)項叹括,當(dāng)b缺失時算墨,默認(rèn)為單位矩陣。
> b10
[,1]
[1,] 8
[2,] 9
> a10
[,1] [,2]
[1,] 1 3
[2,] 2 4
> solve(a10,b10)
[,1]
[1,] -2.5
[2,] 3.5
矩陣求逆
通過solve函數(shù)可進(jìn)行矩陣求逆計算领猾,只指定1個參數(shù)(待求逆的矩陣)即可米同。
例:
> a10
[,1] [,2]
[1,] 1 3
[2,] 2 4
> solve(a10)
[,1] [,2]
[1,] -2 1.5
[2,] 1 -0.5
矩陣的特征值求解
R語言通過eigen函數(shù)可求解特征值骇扇。
> a11 <- array(c(1:16),dim=c(4,4))
> a11
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
> eigen(a11)
$values
[1] 3.620937e+01 -2.209373e+00 1.599839e-15 7.166935e-16
$vectors
[,1] [,2] [,3] [,4]
[1,] 0.4140028 0.82289268 -0.5477226 0.1125155
[2,] 0.4688206 0.42193991 0.7302967 0.2495210
[3,] 0.5236384 0.02098714 0.1825742 -0.8365883
[4,] 0.5784562 -0.37996563 -0.3651484 0.4745519
求解矩陣行列式
> a16 <- array(c(3:6),dim=c(2,2))
> a16
[,1] [,2]
[1,] 3 5
[2,] 4 6
> det(a16)
[1] -2
奇異值分解
使用R語言的svd函數(shù)可完成奇異分解摔竿。
> a20 <- array(c(1:16),dim=c(4,4))
> a20
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
> svd(a20)
$d
[1] 3.862266e+01 2.071323e+00 2.076990e-15 4.119458e-16
$u
[,1] [,2] [,3] [,4]
[1,] -0.4284124 -0.7186535 0.43803202 0.3288281
[2,] -0.4743725 -0.2738078 -0.82913672 -0.1119477
[3,] -0.5203326 0.1710379 0.34417739 -0.7625890
[4,] -0.5662928 0.6158835 0.04692732 0.5457086
$v
[,1] [,2] [,3] [,4]
[1,] -0.1347221 0.82574206 0.5322301 -0.1293488
[2,] -0.3407577 0.42881720 -0.6132292 0.5691660
[3,] -0.5467933 0.03189234 -0.3702319 -0.7502855
[4,] -0.7528288 -0.36503251 0.4512310 0.3104683