矩陣

利用 matrix 建立矩陣

當陣列是 2 維的狀況就是所謂的矩陣,可以利用 matix 產生矩陣,也可以用之前產生陣列的方法實作。

> matrix(c(1:4), nrow = 2, ncol = 2) # 預設是按照 column 填入資料
     [,1] [,2]
[1,]    1    3
[2,]    2    4

> matrix(c(1:4), nrow = 2, ncol = 2, byrow = TRUE) # 可以更改成按照 row 填入資料
     [,1] [,2]
[1,]    1    2
[2,]    3    4

透過指標提取資料

矩陣跟陣列一樣,還是可以透過指標選取矩陣的部份元素。

> x <- c(1, 2, 3)
> y <- c(4, 5, 6)

> z = rbind(x, y)
> z
  [,1] [,2] [,3]
x    1    2    3
y    4    5    6

> z[,1] # 選取第一行(column、直)
x y
1 4

> z[1,] # 選取第一列(row、橫)
[1] 1 2 3

> z[1,1:2] # 選取第一列第一到二行
[1] 1 2

基本相關函數

  • t(x):將矩陣轉置。
  • %*%:矩陣相乘。
  • diag:產生一個對角矩陣,或回傳矩陣的對角線向量
  • det:計算矩陣行列式值,一定是要對稱矩陣。
  • solve:傳回矩陣的反矩陣,非常適合解線性方程式。
  • eigen:計算矩陣的特徵向量與特徵值。
  • rownames:修改或查詢 row 名稱。
  • colnames:修改或查詢 column 名稱。
> x <- c(1, 2, 3)
> y <- c(4, 5, 6)

> z <- rbind(x, y)
  [,1] [,2] [,3]
x    1    2    3
y    4    5    6

> t(z)
     x y
[1,] 1 4
[2,] 2 5
[3,] 3 6

> z %*% z # 矩陣相乘要符合前者 column 維度 = 後者 row 維度,如果沒有會發生錯誤!
錯誤在z %*% z : 非調和引數
> v <- z %*% t(z)
   x  y
x 14 32
y 32 77


> w <- diag(c(1,2,3)) # 傳入向量回傳一個對角矩陣
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    2    0
[3,]    0    0    3

> diag(w) # 傳入矩陣回傳矩陣對角線向量
[1] 1 2 3

> det(v) #一定要對稱矩陣才可以計算。
[1] 54

> solve(v)
           x          y
x  1.4259259 -0.5925926
y -0.5925926  0.2592593

> b = c(1,1)   解 Ax = b,求出 x 向量 A:變數 v,b:變數 b
> solve(v,b)
         x          y
 0.8333333 -0.3333333

> u = matrix(1:9, nrow = 3, ncol = 3)
> u
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> eigen(u) # 特徵值
$values
[1]  1.611684e+01 -1.116844e+00 -5.700691e-16

$vectors # 特徵向量
           [,1]       [,2]       [,3]
[1,] -0.4645473 -0.8829060  0.4082483
[2,] -0.5707955 -0.2395204 -0.8164966
[3,] -0.6770438  0.4038651  0.4082483

> rownames(z) # 還沒修改的時候,是 x 與 y,因為當初是利用兩個向量,利用 rbind 組成,所以會利用向量的變數稱名當作 row 名稱。
[1] "x" "y"
> rownames(z) <- c("第一行", "第二行")
> rownames(z)
[1] "第一行" "第二行"

> colnames(z)
NULL
> colnames(z) <- c("第一列", "第二列", "第三列")
> colnames(z)
[1] "第一列" "第二列" "第三列"

> z
       第一列 第二列 第三列
第一行      1      2      3
第二行      4      5      6

results matching ""

    No results matching ""