You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.5 KiB

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 {
//dist contains: [[datasetLine], [datasetLineResult], [distanceWithInput]]
minDist := dist[0][2]
max := dist[0][2]
var datasetNearResult [][]float64
for i := 0; i < len(dist); i++ {
//fmt.Println(dist[i])
if dist[i][2][0] > max[0] {
max = dist[i][0]
}
//fmt.Println(dist[i][2][0])
if dist[i][2][0] < minDist[0] {
minDist = dist[i][2]
datasetNearResult = dist[i]
}
//fmt.Println(dist[i][1])
}
/*fmt.Println(min)
fmt.Println(max)*/
return datasetNearResult
}