0

我有一个尺寸为 942*50 的矩阵 X。我想用高斯 RBF 内核创建一个亲和矩阵。即,对于 X 矩阵中的每一对行,我想计算 exp(-sigma*norm(x_i-x_j)^2) 其中 x_i 和 x_j 是 X 矩阵的行,并且 i,j 从 1:nrow( X)。我正在用 R 编写代码。下面的 R 代码会引发错误:

library('kernlab')
rbf <- rbfdot(sigma=15.0563)
func <- function(i,j){return(rbf(X[i,],X[j,]))}
rows <- cols <- 1:nrow(X)
outer(rows,cols,FUN=func)

我收到以下错误:外部错误(行,列,乐趣 = 乐趣):暗淡 [产品 887364] 与对象的长度不匹配 [2500]

4

1 回答 1

3

Outer 需要一个矢量化函数(请参阅 参考资料?outer)。因此,您的代码应该是:

library('kernlab')
rbf<-rbfdot(sigma=15.0563)
func<-Vectorize(function(i,j){return(rbf(X[i,],X[j,]))})
rows<-1:nrow(X)
cols<-1:nrow(X)
outer(rows,cols,FUN=func)
于 2014-07-04T10:05:46.870 回答