goKNN/euclideanDistance.go
euclideanDistance.goRaw
1package main
2
3import (
4 "math"
5)
6
7func euclideanDistance(dataset [][][]int, inputLine []int) [][][]float64 {
8 var distances [][][]float64
9
10 for _, datasetLine := range dataset {
11 datasetLineFloat := arrayIntToFloat64(datasetLine[0])
12 resultDatasetLineFloat := arrayIntToFloat64(datasetLine[1])
13 inputLineFloat := arrayIntToFloat64(inputLine)
14 r := calcDistances(inputLineFloat, datasetLineFloat)
15 distance := []float64{r}
16 var newDatasetLine [][]float64
17 newDatasetLine = append(newDatasetLine, datasetLineFloat)
18 newDatasetLine = append(newDatasetLine, resultDatasetLineFloat)
19 newDatasetLine = append(newDatasetLine, distance)
20 distances = append(distances, newDatasetLine)
21 //distances contains: [[datasetLine], [datasetLineResult], [distanceWithInput]]
22 }
23 return distances
24}
25
26func calcDistances(in []float64, ds []float64) float64 {
27 var r float64
28 r = 0
29 for i := 0; i < len(in); i++ {
30 r = r + (in[i] * ds[i])
31 }
32 r = math.Sqrt(r)
33 return r
34}
35
36func getShortestDistance(dist [][][]float64) [][]float64 {
37 //dist contains: [[datasetLine], [datasetLineResult], [distanceWithInput]]
38 minDist := dist[0][2]
39 max := dist[0][2]
40 var datasetNearResult [][]float64
41 for i := 0; i < len(dist); i++ {
42 //fmt.Println(dist[i])
43 if dist[i][2][0] > max[0] {
44 max = dist[i][0]
45 }
46 //fmt.Println(dist[i][2][0])
47 if dist[i][2][0] < minDist[0] {
48 minDist = dist[i][2]
49 datasetNearResult = dist[i]
50 }
51 //fmt.Println(dist[i][1])
52 }
53 /*fmt.Println(min)
54 fmt.Println(max)*/
55 return datasetNearResult
56}