package main
|
|
|
|
import (
|
|
"math"
|
|
)
|
|
|
|
func euclideanDistance(dataset [][][]int, inputLine []int) [][][]float64 {
|
|
var distances [][][]float64
|
|
|
|
for _, datasetLine := range dataset {
|
|
datasetLineFloat := arrayIntToFloat64(datasetLine[0])
|
|
resultDatasetLineFloat := arrayIntToFloat64(datasetLine[1])
|
|
inputLineFloat := arrayIntToFloat64(inputLine)
|
|
r := calcDistances(inputLineFloat, datasetLineFloat)
|
|
distance := []float64{r}
|
|
var newDatasetLine [][]float64
|
|
newDatasetLine = append(newDatasetLine, datasetLineFloat)
|
|
newDatasetLine = append(newDatasetLine, resultDatasetLineFloat)
|
|
newDatasetLine = append(newDatasetLine, distance)
|
|
distances = append(distances, newDatasetLine)
|
|
//distances contains: [[datasetLine], [datasetLineResult], [distanceWithInput]]
|
|
}
|
|
return distances
|
|
}
|
|
|
|
func calcDistances(in []float64, ds []float64) float64 {
|
|
var r float64
|
|
r = 0
|
|
for i := 0; i < len(in); i++ {
|
|
r = r + (in[i] * ds[i])
|
|
}
|
|
r = math.Sqrt(r)
|
|
return r
|
|
}
|
|
|
|
func getShortestDistance(dist [][][]float64) [][]float64 {
|
|
min := dist[0][2]
|
|
max := dist[0][2]
|
|
var datasetNearResult [][]float64
|
|
for i := 0; i < len(dist); i++ {
|
|
//fmt.Println(dist[i][1])
|
|
if dist[i][2][0] > max[0] {
|
|
max = dist[i][0]
|
|
}
|
|
/*fmt.Println(min[0])
|
|
fmt.Println(dist[i][1][0])*/
|
|
if dist[i][2][0] < min[0] {
|
|
min = dist[i][0]
|
|
datasetNearResult = dist[i]
|
|
}
|
|
//fmt.Println(dist[i][1])
|
|
}
|
|
/*fmt.Println(min)
|
|
fmt.Println(max)*/
|
|
return datasetNearResult
|
|
}
|