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.

32 lines
1.3 KiB

from datetime import date
def ecartDate(date1, date2):
"""Renvoie le nombre de jours écoulés
entre date1 et date2 (modulo 365)"""
delta_sec = (date.fromisoformat(date2)-date.fromisoformat(date1)).total_seconds()
secParJour = 86400
return delta_sec / secParJour
def distance(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 euclidienne au carré entre ces deux points"""
duree = ecartDate(point1[0], point2[0])
delta_T_moy = (point1[1]-point2[1])**2
delta_T_ref = (point1[2]-point2[2])**2
return duree**2/100 + delta_T_moy**2 + delta_T_ref**2
def kPlusProches(point_a_verifier, tableau, k):
"""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).
Renvoie un tableau trié avec les k plus proches
points de `point_a_verifier`, au format (distance, indice du tableau original)"""
dist = []
for i, point in enumerate(tableau):
dist.append(distance(point_a_verifier, point), i)
sorted(dist, key=lambda t: t[0])
return dist[:k+1]