Notez qu'il a fallu un certain temps pour récupérer la valeur la plus proche d'une certaine valeur de la liste en Python.
J'ai vu comment utiliser la fonction searchsorted de numpy sur le net, mais cette fonction insère une valeur dans la liste. Puisqu'il s'agit d'une fonction qui renvoie l'index lors de cette opération, elle ne renvoie pas toujours l'index de la valeur la plus proche d'une certaine valeur.
** Exemple de panne réelle **
Exemple d'échec.py
# coding: utf-8
import numpy as np
def getNearestValue(list, num):
#Obtenir l'index lors de l'insertion dans l'ordre croissant
sortIdx = np.searchsorted(list, num, side='left')
return list[sortIdx]
if __name__ == "__main__":
list = [0, 0.5, 1]
print(getNearestValue(list, 0.1)) # →0 OK
print(getNearestValue(list, 0.4)) # →0 NG
La valeur la plus proche de «0.4» dans l'élément de liste du code ci-dessus est 0,5, mais 0 est renvoyé.
~~ Par conséquent, nous avons implémenté une fonction qui calcule la différence entre les valeurs cibles des éléments périphériques de l'index obtenu par la fonction searchsorted et extrait la valeur la plus proche d'une certaine valeur. ~~
** Addendum: 24/08/2016 ** kochory m'a donné un code qui a été grandement simplifié. Il est implémenté en calculant la différence entre une certaine valeur et les éléments de la liste et en trouvant l'indice de la valeur minimale. Je vous remercie!
getNearestValue_sample2.py
# coding: utf-8
import numpy as np
def getNearestValue(list, num):
"""
Aperçu:Une fonction qui renvoie la valeur la plus proche d'une valeur de la liste
@param list:Tableau de données
@param num:Valeur cible
@return La valeur la plus proche de la valeur cible
"""
#Calculez la différence entre l'élément de liste et la valeur cible et obtenez l'index de la valeur minimale
idx = np.abs(np.asarray(list) - num).argmin()
return list[idx]
if __name__ == "__main__":
list = [0, 0.5, 1]
print(getNearestValue(list, -0.1)) # →0
print(getNearestValue(list, 0.1)) # →0
print(getNearestValue(list, 0.4)) # →0.5
print(getNearestValue(list, 0.5)) # →0.5
print(getNearestValue(list, 0.6)) # →0.5
print(getNearestValue(list, 0.8)) # →1
print(getNearestValue(list, 1.2)) # →1
Recommended Posts