◮ R語言筆記(四): 向量、陣列、矩陣與資料框 + 利用矩陣求解二維線性方程組
在筆記一中已經提到了向量,這篇文章主要介紹R語言中的四中常用的結構:
向量:*傳送門*
陣列
矩陣
資料框
然後在介紹如何利用矩陣求解二維線性方程組。
****************************************************************************************************************************************
一:陣列(*陣列可以理解是一個向量按照給定的維度進行拆分)
★陣列即是二維向量,矩陣是一種特殊的二維陣列
★將一個向量轉化為一個二位陣列(新增指定維度即可)
> x = c(1,2,3,4,5,6);dim(x)<-c(2,3) #兩行三列
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
二:矩陣(矩陣matrix)
★將兩個向量合成矩陣(按照行合併rbind()+按照列c合併cbind())
> x1 = c(1,2,3,4,5) > x2 = c(6,7,8,9,0) > rbind(x1,x2) #行式合併 [,1] [,2] [,3] [,4] [,5] x1 1 2 3 4 5 x2 6 7 8 9 0 > cbind(x1,x2) #column列式合併 x1 x2 [1,] 1 6 [2,] 2 7 [3,] 3 8 [4,] 4 9 [5,] 5 0
★將一個向量生成矩陣(matrix(x,nrow=?,ncol=?,byrow=T/F))
> a = c(1:12)
> matrix(a,ncol=3,nrow=4,byrow=F) #column列 row行
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
# 預設是按照列來儲存
# 使用byrow=T即可按照行來排列
★對矩陣的操作(轉置t()、加減+/-、相乘%*%)
*注意矩陣的相乘!
> a = c(1:12)
> matrix(a,ncol=3,nrow=4)
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
> a = matrix(a,ncol=3,nrow=4)
> t(a) #矩陣的轉置
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
> t(a)+t(a) #矩陣的相加
[,1] [,2] [,3] [,4]
[1,] 2 4 6 8
[2,] 10 12 14 16
[3,] 18 20 22 24
> t(a)-t(a) #矩陣的相減
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
[3,] 0 0 0 0
#############################
> a*a #矩陣相乘不是這樣求的!!!
[,1] [,2] [,3]
[1,] 1 25 81
[2,] 4 36 100
[3,] 9 49 121
[4,] 16 64 144
> a%*%a #矩陣相乘正確表示法-1
Error in a %*% a : 非整合引數
> a%*%t(a) #矩陣相乘正確表示法-2
[,1] [,2] [,3] [,4]
[1,] 107 122 137 152
[2,] 122 140 158 176
[3,] 137 158 179 200
[4,] 152 176 200 224
★對矩陣的求逆solve()
> a = matrix(rnorm(16),4,4) #產生16個標準正態函式隨機數形成矩陣
> a
[,1] [,2] [,3] [,4]
[1,] -0.7916955 -0.12091979 0.8894439 -0.9282618
[2,] -1.0293705 -0.03193216 1.2088014 -0.8579586
[3,] 0.5910502 -0.13763924 -2.0954597 1.2839705
[4,] -1.2613026 1.68569169 1.1454875 0.7667483
> solve(a) #矩陣求逆
[,1] [,2] [,3] [,4]
[1,] 0.1013944 -1.414402 -0.8201621 -0.08648724
[2,] 4.4811933 -4.612241 -0.3206119 0.80112951
[3,] -3.2370056 2.449358 -0.5650455 -0.23193872
[4,] -4.8491425 4.154059 0.1998474 -0.25283530
三:資料框 data.frame()
資料框其實跟矩陣差不多,都是二維表單,但是矩陣中每一個數據都是數值型的,
而資料框中每一列的型別可以是不同的
用法:
x1 = c(1,2,3,4,5,6,7)
x2 = c(5,8,9,5,4,7,6)
x = data.frame(x1,x2)
x = data.frame('重量'=x1,'運費'=x2)
###################################
> x1 = c("aaa","bbb","ty","ju","hh","df","wq") #這裡雙引號可以,單引號也可以
> x2 = c(1:7)
> cbind(x1,x2) #列合成矩陣--->>>注意下面輸出資料中的引號
x1 x2
[1,] "aaa" "1"
[2,] "bbb" "2"
[3,] "ty" "3"
[4,] "ju" "4"
[5,] "hh" "5"
[6,] "df" "6"
[7,] "wq" "7"
> data.frame('重量'=x1,'運費'=x2) #資料框
重量 運費
1 aaa 1
2 bbb 2
3 ty 3
4 ju 4
5 hh 5
6 df 6
7 wq 7
四:利用矩陣求解二維線性方程組(使用solve(a,b)函式)
*solve()在上面也用於矩陣的求逆
★現在要求解一個四元線性方程組,可以使用4*4型矩陣進行該四個方程的儲存:
> a = matrix(rnorm(16),4,4) #產生16個標準正態函式隨機數形成矩陣
> a
[,1] [,2] [,3] [,4]
[1,] -0.7916955 -0.12091979 0.8894439 -0.9282618
[2,] -1.0293705 -0.03193216 1.2088014 -0.8579586
[3,] 0.5910502 -0.13763924 -2.0954597 1.2839705
[4,] -1.2613026 1.68569169 1.1454875 0.7667483
b = 1,2,3,4
> solve(a,b)
[1] -5.5338453 -2.5006061 -0.9611801 3.0471763
★這裡solve()函式的引數的含義:
*以第一行為例:(-0.7916955*x1) + (-0.12091979*x2) + (0.8894439*x3) + (-0.9282618*x4) = 1
*最後顯示的結果是x1,x2,x3,x4的值。
****************************************************************************************************************************************
最快的腳步不是跨越,而是繼續,最慢的步伐不是小步,而是徘徊。
****************************************************************************************************************************************