ベクトルセット間の距離

d <- 4

n1 <- 1000
n2 <- 2000

# 2つのベクトルセットの、ペアワイズ距離2乗

my.pairwiseL2 <- function(X,Y){
	n1 <- length(X[,1])
	n2 <- length(Y[,1])
	XX <- rowSums(X^2)
	YY <- rowSums(Y^2)
	XY <- X %*% t(Y)
	XXX <- rep(XX,n2)
	YYY <- rep(YY,each=n1)
	return(XXX + YYY - 2*XY)
}

X <- matrix(rnorm(n1*d),ncol=d)
Y <- matrix(rnorm(n2*d),ncol=d)

D1 <- my.pairwiseL2(X,Y)

D2 <- matrix(0,n1,n2)
for(i in 1:n1){
	for(j in 1:n2){
		D2[i,j] <- sum((X[i,]-Y[j,])^2)
	}
}

range(D1- D2)