🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 矩陣 ### 利用 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 ~~~