我想在R代码中使用下面的matlab语法,实际上X是一个nxm矩阵:
Hs(i,j)=norm(X(i,:)-X(j,:))^2;
Hs(j,i)=Hs(i,j);
Hs=exp(-Hs/3);
这是我的R代码:
Hs[i,j]=sqrt(sum((X[i,]- X[j,])^2))
Hs[i,j]=Hs[j,i]
Hs=exp(-Hs/3)
但结果输出的问题是矩阵3x3,所有元素= 1。请帮忙。
答案如下:
#Euclidean matrix
euc.dist <- function(p, q) {
ed<-sqrt(sum((p - q)^2))
return((ed))
}
#Gaussian kernel nxn matrix
get.gramm.nn <- function(X) {
n <- dim(X)[1]
Gramm<- matrix(0, n, n) #initializes Gramm array #i=index for rows
#j=index for columns Gramm<-as.matrix(Gramm) # Gramm matrix
for (i in 1:n) {
for (j in 1:n) {
Gramm[i, j] <- euc.dist(X[i,], X[j,])
}
}
Gramm<- exp(-(Gramm)^2)
return(Gramm)
}