R中多项式核矩阵的计算

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,

我试图计算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,
  -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