Array2ArrayDist <- function(Source, Data) { #========================================= # Find the distance^2 from the # Source vectors to Data vectors #========================================= n.Source <- dim(Source)[1] n.Data <- dim(Data)[1] # 2*the datum for use in cosine law Dx2 <- t(2*Data) # Length^2 of each datum vector Data.const <- apply(Data*Data, 1, sum) # Length^2 of each source vector Source.const <- apply(Source*Source, 1, sum) # Source^2 - 2*Source*Data + Data^2 # Note that the first matrix has one col. for each datum. matrix(Source.const, n.Source, n.Data) - Source%*%Dx2 + matrix(Data.const, n.Source, n.Data, byrow=T) }