我有一个 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')的重要情况中获得很多收益。
我有一个 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')的重要情况中获得很多收益。
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,]) )
)