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语言矩阵向量操作(矩阵乘法,向量内积外积(叉乘),矩阵转置,矩阵的逆)的主要内容,如果未能解决你的问题,请参考以下文章

矩阵乘法

变换矩阵

线性代数基础知识.md

数理知识向量数乘,内积,外积,matlab代码实现

Python Numpy中的几个矩阵乘法

向量点乘(内积),叉乘(外积)