|
|
@ -7,7 +7,7 @@ def ecartDate(date1, date2): |
|
|
|
secParJour = 86400 |
|
|
|
return delta_sec / secParJour |
|
|
|
|
|
|
|
def distance(point1, point2): |
|
|
|
def distance_euclide(point1, point2): |
|
|
|
"""Prend en paramètre 2 tuples au format |
|
|
|
(Date du jour, Température moyenne, température de référence) |
|
|
|
et qui renvoie un nombre réel représentant |
|
|
@ -19,15 +19,34 @@ def distance(point1, point2): |
|
|
|
|
|
|
|
return duree**2/100 + delta_T_moy**2 + delta_T_ref**2 |
|
|
|
|
|
|
|
def distance_manhattan(point1, point2): |
|
|
|
"""Prend en paramètre 2 tuples au format |
|
|
|
(Date du jour, Température moyenne, température de référence) |
|
|
|
et qui renvoie un nombre réel représentant |
|
|
|
la distance de Manhattan entre ces deux points""" |
|
|
|
|
|
|
|
duree = abs(ecartDate(point1[0], point2[0])) |
|
|
|
delta_T_moy = abs(point1[1]-point2[1]) |
|
|
|
delta_T_ref = abs(point1[2]-point2[2]) |
|
|
|
|
|
|
|
return duree/100 + delta_T_moy + delta_T_ref |
|
|
|
|
|
|
|
|
|
|
|
def kPlusProches(point_a_verifier, tableau, k): |
|
|
|
|
|
|
|
def kPlusProches(point_a_verifier, tableau, k, isEuclideanDistance): |
|
|
|
"""Prend en paramètres un tuple au format |
|
|
|
(Date du jour, Température moyenne, température de référence) |
|
|
|
et un tableau au format (Numéro du jour, Température moyenne, Température de référence). |
|
|
|
`isEuclidDistance` : true -> euclide ; false -> manhattan |
|
|
|
Renvoie un tableau trié avec les k plus proches |
|
|
|
points de `point_a_verifier`, au format (distance, indice du tableau original)""" |
|
|
|
|
|
|
|
dist = [] |
|
|
|
if isEuclideanDistance: |
|
|
|
distance = distance_euclide |
|
|
|
else: |
|
|
|
distance = distance_manhattan |
|
|
|
|
|
|
|
for i, point in enumerate(tableau): |
|
|
|
dist.append((distance(point_a_verifier, point[0]), i)) |
|
|
|
dist = sorted(dist, key=lambda t: t[0]) |
|
|
|