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 min := dist[0][2]
38 max := dist[0][2]
39 var datasetNearResult [][]float64
40 for i := 0; i < len(dist); i++ {
41 //fmt.Println(dist[i][1])
42 if dist[i][2][0] > max[0] {
43 max = dist[i][0]
44 }
45 /*fmt.Println(min[0])
46 fmt.Println(dist[i][1][0])*/
47 if dist[i][2][0] < min[0] {
48 min = dist[i][0]
49 datasetNearResult = dist[i]
50 }
51 //fmt.Println(dist[i][1])
52 }
53 /*fmt.Println(min)
54 fmt.Println(max)*/
55 return datasetNearResult
56}