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