R 語(yǔ)言為線性代數(shù)的研究提供了矩陣類型,這種數(shù)據(jù)結(jié)構(gòu)很類似于其它語(yǔ)言中的二維數(shù)組,但 R 提供了語(yǔ)言級(jí)的矩陣運(yùn)算支持。
矩陣?yán)锏脑乜梢允菙?shù)字、符號(hào)或數(shù)學(xué)式。
一個(gè) M x N 的矩陣是一個(gè)由 M(row) 行 和 N 列(column)元素排列成的矩形陣列。

以下是一個(gè)由 6 個(gè)數(shù)字元素構(gòu)成的 2 行 3 列的矩陣:

R 語(yǔ)言的矩陣可以使用 matrix() 函數(shù)來(lái)創(chuàng)建,語(yǔ)法格式如下:
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)
參數(shù)說(shuō)明:
data 向量,矩陣的數(shù)據(jù)
nrow 行數(shù)
ncol 列數(shù)
byrow 邏輯值,為 FALSE 按列排列,為 TRUE 按行排列
dimname 設(shè)置行和列的名稱
創(chuàng)建一個(gè)數(shù)字矩陣:
# 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)執(zhí)行以上代碼輸出結(jié)果為:
[,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 語(yǔ)言矩陣提供了 t() 函數(shù),可以實(shí)現(xiàn)矩陣的行列互換。
例如有個(gè) m 行 n 列的矩陣,使用 t() 函數(shù)就能轉(zhuǎn)換為 n 行 m 列的矩陣。


# 創(chuàng)建一個(gè) 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 # 轉(zhuǎn)換為 3 行 2 列的矩陣 print(t(M))
執(zhí)行以上代碼輸出結(jié)果為:
[,1] [,2] [,3] [1,] 2 6 5 [2,] 1 10 4 [1] "-----轉(zhuǎn)換-----" [,1] [,2] [1,] 2 1 [2,] 6 10 [3,] 5 4
如果想獲取矩陣元素,可以通過(guò)使用元素的列索引和行索引,類似坐標(biāo)形式。
# 定義行和列的名稱
rownames = c("row1", "row2", "row3", "row4")
colnames = c("col1", "col2", "col3")
# 創(chuàng)建矩陣
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])執(zhí)行以上代碼輸出結(jié)果為:
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
大小相同(行數(shù)列數(shù)都相同)的矩陣之間可以相互加減,具體是對(duì)每個(gè)位置上的元素做加減法。矩陣的乘法則較為復(fù)雜。兩個(gè)矩陣可以相乘,當(dāng)且僅當(dāng)?shù)谝粋€(gè)矩陣的列數(shù)等于第二個(gè)矩陣的行數(shù)。
# 創(chuàng)建 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)
# 兩個(gè)矩陣相加
result <- matrix1 + matrix2
cat("相加結(jié)果:","\n")
print(result)
# 兩個(gè)矩陣相減
result <- matrix1 - matrix2
cat("相減結(jié)果:","\n")
print(result)執(zhí)行以上代碼輸出結(jié)果為:
[,1] [,2] [,3] [1,] 7 -1 2 [2,] 9 4 3 [,1] [,2] [,3] [1,] 6 0 3 [2,] 1 9 2 相加結(jié)果: [,1] [,2] [,3] [1,] 13 -1 5 [2,] 10 13 5 相減結(jié)果: [,1] [,2] [,3] [1,] 1 -1 -1 [2,] 8 -5 1
# 創(chuàng)建 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)
# 兩個(gè)矩陣相乘
result <- matrix1 * matrix2
cat("相乘結(jié)果:","\n")
print(result)
# 兩個(gè)矩陣相除
result <- matrix1 / matrix2
cat("相除結(jié)果:","\n")
print(result)執(zhí)行以上代碼輸出結(jié)果為:
[,1] [,2] [,3] [1,] 7 -1 2 [2,] 9 4 3 [,1] [,2] [,3] [1,] 6 0 3 [2,] 1 9 2 相乘結(jié)果: [,1] [,2] [,3] [1,] 42 0 6 [2,] 9 36 6 相除結(jié)果: [,1] [,2] [,3] [1,] 1.166667 -Inf 0.6666667 [2,] 9.000000 0.4444444 1.5000000