在R中快速计算核矩阵

6

我有一个 n x p 的矩阵,想要计算出一个 n x n 的矩阵 B,其定义如下:

B[i, j] = f(A[i,], A[j,])

其中f是一个接受适当维度参数的函数。有没有在R中计算这个的巧妙方法?f是对称且正定的(如果这有助于计算)。

编辑:Praneet要求指定f。这是个好点。虽然我认为对于任何函数都有一个高效的解决方案很有趣,但我可以从f(x,y)=base :: norm(x-y,type ='F')的重要情况中获得很多收益。


1
知道 $f(.)$ 的形式会有所帮助。例如,对于一个微不足道的线性核,你只需要将一个参数与其转置相乘即可。因此,它可能取决于 $f(.)$ 的定义。 - hearse
1个回答

4
您可以使用outer与矩阵维度配合使用。
n <- 10
p <- 5
A <- matrix( rnorm(n*p), n, p )
f <- function(x,y) sqrt(sum((x-y)^2))
B <- outer( 
  1:n, 1:n, 
  Vectorize( function(i,j) f(A[i,], A[j,]) ) 
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接