R语言矩阵向量操作(矩阵乘法,向量内积外积(叉乘),矩阵转置,矩阵的逆)
Posted Z.Q.Feng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言矩阵向量操作(矩阵乘法,向量内积外积(叉乘),矩阵转置,矩阵的逆)相关的知识,希望对你有一定的参考价值。
前言
创建两个四维矩阵 A 与 B,A 按列填充,B 按行填充
:
A <- matrix(1:16, 4, 4, byrow = FALSE)
B <- matrix(1:16, 4, 4, byrow = TRUE)
创建两个 n 维向量 x 和 y
:
x <- c(1, 2, 3, 4, 5)
y <- c(2, 4, 6, 8, 10)
求矩阵、向量转置
使用 t(矩阵、向量名)
即可:
t(A) == B
输出如下:
> t(A) == B
[,1] [,2] [,3] [,4]
[1,] TRUE TRUE TRUE TRUE
[2,] TRUE TRUE TRUE TRUE
[3,] TRUE TRUE TRUE TRUE
[4,] TRUE TRUE TRUE TRUE
矩阵乘法
使用 %*%
符号即可:
A %*% B
输出如下:
> A %*% B
[,1] [,2] [,3] [,4]
[1,] 276 304 332 360
[2,] 304 336 368 400
[3,] 332 368 404 440
[4,] 360 400 440 480
求矩阵、向量内积
在R语言中,两个矩阵、向量的内积并不只是简单的 *
号就完事了,而是有以下两种求法:
t(A) %*% B
或者
crossprod(A, B)
crossprod(x, y)
其结果如下:(注意区分于矩阵乘法)
> t(A) %*% B
[,1] [,2] [,3] [,4]
[1,] 90 100 110 120
[2,] 202 228 254 280
[3,] 314 356 398 440
[4,] 426 484 542 600
> crossprod(A, B) # 这里为A的每行向量与B的每行向量做内积(点乘)
[,1] [,2] [,3] [,4]
[1,] 90 100 110 120
[2,] 202 228 254 280
[3,] 314 356 398 440
[4,] 426 484 542 600
> crossprod(x, y)
[,1]
[1,] 110
求向量外积(叉乘)
对应符号为 %o%
或使用 outer()
函数:
x %o% y
outer(x, y)
输出如下:
> x %o% y
[,1] [,2] [,3] [,4] [,5]
[1,] 2 4 6 8 10
[2,] 4 8 12 16 20
[3,] 6 12 18 24 30
[4,] 8 16 24 32 40
[5,] 10 20 30 40 50
> outer(x, y)
[,1] [,2] [,3] [,4] [,5]
[1,] 2 4 6 8 10
[2,] 4 8 12 16 20
[3,] 6 12 18 24 30
[4,] 8 16 24 32 40
[5,] 10 20 30 40 50
也可使用 x %*% t(y)
或者 tcrossprod(x, y)
。
求矩阵的逆
R语言的 solve(A, b)
函数可以求解线性方程组 Ax=b
,直接使用 solve(A)
即可求解矩阵 A 的逆:
> C = matrix(c(1, 2, -1, -3), 2, 2, byrow = TRUE)
> solve(C)
输出如下:
> D <- solve(C)
> C %*% D
[,1] [,2]
[1,] 1 0
[2,] 0 1
以上是关于R语言矩阵向量操作(矩阵乘法,向量内积外积(叉乘),矩阵转置,矩阵的逆)的主要内容,如果未能解决你的问题,请参考以下文章