我有一个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(xy,type ='F'的重要情况下,我会从高效计算中获得很多里程数。 )。答案 0 :(得分:3)
您可以将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,]) )
)