R中多项式核矩阵的计算
我试图计算R中的多项式核矩阵。我有一个tribble,如下所示:R中多项式核矩阵的计算,r,matrix,R,Matrix,我试图计算R中的多项式核矩阵。我有一个tribble,如下所示: library(tidyverse) tribble( ~x, ~y, -0.5, 1, -1, -1.5, -1.5, 1.5, 1.5, -0.5, 0.5, -0.5, ) %>% as.matrix() 我已经把它转换成一个矩阵,但是我想计算一个2次多项式核矩阵(gram矩阵),定义为 我希望矩阵如下所示: library(tidyverse) tribble( ~x, ~y,
library(tidyverse)
tribble(
~x, ~y,
-0.5, 1,
-1, -1.5,
-1.5, 1.5,
1.5, -0.5,
0.5, -0.5,
) %>% as.matrix()
我已经把它转换成一个矩阵,但是我想计算一个2次多项式核矩阵(gram矩阵),定义为
我希望矩阵如下所示:
library(tidyverse)
tribble(
~x, ~y,
-0.5, 1,
-1, -1.5,
-1.5, 1.5,
1.5, -0.5,
0.5, -0.5,
) %>% as.matrix()
我知道R中使用outer()
和基本实现的向量循环概念,但发现在R中编写它非常具有挑战性
tcrossprod(df)**2
[,1] [,2] [,3] [,4] [,5]
[1,] 1.5625 1.0000 5.0625 1.5625 0.5625
[2,] 1.0000 10.5625 0.5625 0.5625 0.0625
[3,] 5.0625 0.5625 20.2500 9.0000 2.2500
[4,] 1.5625 0.5625 9.0000 6.2500 1.0000
[5,] 0.5625 0.0625 2.2500 1.0000 0.2500
简而言之:(df%*%t(df))^2
简单地说:
(df%*%t(df))^2
我们可以使用crossprod
crossprod(t(df))^2
-输出
# [,1] [,2] [,3] [,4] [,5]
#[1,] 1.5625 1.0000 5.0625 1.5625 0.5625
#[2,] 1.0000 10.5625 0.5625 0.5625 0.0625
#[3,] 5.0625 0.5625 20.2500 9.0000 2.2500
#[4,] 1.5625 0.5625 9.0000 6.2500 1.0000
#[5,] 0.5625 0.0625 2.2500 1.0000 0.2500
我们可以使用
crossprod
crossprod(t(df))^2
-输出
# [,1] [,2] [,3] [,4] [,5]
#[1,] 1.5625 1.0000 5.0625 1.5625 0.5625
#[2,] 1.0000 10.5625 0.5625 0.5625 0.0625
#[3,] 5.0625 0.5625 20.2500 9.0000 2.2500
#[4,] 1.5625 0.5625 9.0000 6.2500 1.0000
#[5,] 0.5625 0.0625 2.2500 1.0000 0.2500