使用R的欧几里德范数

问题描述 投票:-1回答:1

我想在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。请帮忙。

r
1个回答
0
投票

答案如下:

#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)
}
© www.soinside.com 2019 - 2024. All rights reserved.