R 語言為線性代數的研究提供了矩陣類型,這種數據結構很類似於其它語言中的二維數組,但 R 提供了語言級的矩陣運算支持。
矩陣裡的元素可以是數字、符號或數學式。
一個 M x N 的矩陣是一個由 M(row) 行 和 N 列(column)元素排列成的矩形陣列。
以下是一個由 6 個數字元素構成的 2 行 3 列的矩陣:
R 語言的矩陣可以使用 matrix() 函數來創建,語法格式如下:
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)
參數說明:
創建一個數字矩陣:
實例# byrow 為 TRUE 元素按行排列
M <- matrix(c(3:14), nrow = 4, byrow = TRUE)
print(M)
# Ebyrow 為 FALSE 元素按列排列
N <- matrix(c(3:14), nrow = 4, byrow = FALSE)
print(N)
# 定義行和列的名稱
rownames = c("row1", "row2", "row3", "row4")
colnames = c("col1", "col2", "col3")
P <- matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames))
print(P)
執行以上代碼輸出結果為:
[,1] [,2] [,3][1,] 3 4 5[2,] 6 7 8[3,] 9 10 11[4,] 12 13 14
[,1] [,2] [,3][1,] 3 7 11[2,] 4 8 12[3,] 5 9 13[4,] 6 10 14
col1 col2 col3
row1 3 4 5
row2 6 7 8
row3 9 10 11
row4 12 13 14
R 語言矩陣提供了 t() 函數,可以實現矩陣的行列互換。
例如有個 m 行 n 列的矩陣,使用 t() 函數就能轉換為 n 行 m 列的矩陣。
實例# 創建一個 2 行 3 列的矩陣
M = matrix( c(2,6,5,1,10,4), nrow = 2,ncol = 3,byrow = TRUE)
print(M)
[,1] [,2] [,3]
[1,] 2 6 5
[2,] 1 10 4
# 轉換為 3 行 2 列的矩陣
print(t(M))
執行以上代碼輸出結果為:
[,1] [,2] [,3][1,] 2 6 5[2,] 1 10 4[1] "轉換"
[,1] [,2][1,] 2 1[2,] 6 10[3,] 5 4
如果想獲取矩陣元素,可以通過使用元素的列索引和行索引,類似坐標形式。
實例# 定義行和列的名稱
rownames = c("row1", "row2", "row3", "row4")
colnames = c("col1", "col2", "col3")
# 創建矩陣
P <- matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames))
print(P)
# 獲取第一行第三列的元素
print(P[1,3])
# 獲取第四行第二列的元素
print(P[4,2])
# 獲取第二行
print(P[2,])
# 獲取第三列
print(P[,3])
執行以上代碼輸出結果為:
col1 col2 col3
row1 3 4 5
row2 6 7 8
row3 9 10 11
row4 12 13 14[1] 5[1] 13
col1 col2 col3
6 7 8
row1 row2 row3 row4
5 8 11 14
大小相同(行數列數都相同)的矩陣之間可以相互加減,具體是對每個位置上的元素做加減法。矩陣的乘法則較為複雜。兩個矩陣可以相乘,若且唯若第一個矩陣的列數等於第二個矩陣的行數。
矩陣加減法實例# 創建 2 行 3 列的矩陣
matrix1 <- matrix(c(7, 9, -1, 4, 2, 3), nrow = 2)
print(matrix1)
matrix2 <- matrix(c(6, 1, 0, 9, 3, 2), nrow = 2)
print(matrix2)
# 兩個矩陣相加
result <- matrix1 + matrix2
cat("相加結果:","\n")
print(result)
# 兩個矩陣相減
result <- matrix1 - matrix2
cat("相減結果:","\n")
print(result)
執行以上代碼輸出結果為:
[,1] [,2] [,3][1,] 7 -1 2[2,] 9 4 3
[,1] [,2] [,3][1,] 6 0 3[2,] 1 9 2相加結果:
[,1] [,2] [,3][1,] 13 -1 5[2,] 10 13 5相減結果:
[,1] [,2] [,3][1,] 1 -1 -1[2,] 8 -5 1
# 創建 2 行 3 列的矩陣
matrix1 <- matrix(c(7, 9, -1, 4, 2, 3), nrow = 2)
print(matrix1)
matrix2 <- matrix(c(6, 1, 0, 9, 3, 2), nrow = 2)
print(matrix2)
# 兩個矩陣相乘
result <- matrix1 * matrix2
cat("相加結果:","\n")
print(result)
# 兩個矩陣相除
result <- matrix1 / matrix2
cat("相減結果:","\n")
print(result)
執行以上代碼輸出結果為:
[,1] [,2] [,3][1,] 7 -1 2[2,] 9 4 3
[,1] [,2] [,3][1,] 6 0 3[2,] 1 9 2相加結果:
[,1] [,2] [,3][1,] 42 0 6[2,] 9 36 6相減結果:
[,1] [,2] [,3][1,] 1.166667 -Inf 0.6666667[2,] 9.000000 0.4444444 1.5000000