21
2020
08

R 矩阵

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)

参数说明:

data 向量,矩阵的数据

nrow 行数

ncol 列数

byrow 逻辑值,为 FALSE 按列排列,为 TRUE 按行排列

dimname 设置行和列的名称

创建一个数字矩阵:

实例

# 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

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。