Beachten Sie, dass es einige Zeit gedauert hat, den Wert, der einem bestimmten Wert am nächsten kommt, aus der Liste in Python abzurufen.
Ich habe gesehen, wie man die [suchsortierte Funktion] von numpy (http://docs.scipy.org/doc/numpy/reference/generated/numpy.searchsorted.html) im Netz verwendet, aber diese Funktion fügt einen Wert in die Liste ein. Da es sich um eine Funktion handelt, die dabei den Index zurückgibt, wird nicht immer der Index des Werts zurückgegeben, der einem bestimmten Wert am nächsten liegt.
** Beispiel für einen tatsächlichen Fehler **
Fehlerbeispiel.py
# coding: utf-8
import numpy as np
def getNearestValue(list, num):
#Index beim Einfügen in aufsteigender Reihenfolge abrufen
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
Der Wert, der im Listenelement des obigen Codes "0,4" am nächsten kommt, ist 0,5, aber 0 wird zurückgegeben.
~~ Daher haben wir eine Funktion implementiert, die die Differenz zwischen den Zielwerten aus den peripheren Elementen des Index berechnet, die durch die suchsortierte Funktion erhalten wurden, und den Wert extrahiert, der einem bestimmten Wert am nächsten kommt. ~~
** Nachtrag: 24.08.2016 ** kochory gab mir einen Code, der stark optimiert wurde. Es wird implementiert, indem die Differenz zwischen einem bestimmten Wert und den Elementen in der Liste berechnet und der Index des Mindestwerts ermittelt wird. Vielen Dank!
getNearestValue_sample2.py
# coding: utf-8
import numpy as np
def getNearestValue(list, num):
"""
Überblick:Eine Funktion, die den Wert zurückgibt, der einem Wert aus der Liste am nächsten kommt
@param list:Datenarray
@param num:Zielwert
@return Der Wert, der dem Zielwert am nächsten kommt
"""
#Berechnen Sie die Differenz zwischen dem Listenelement und dem Zielwert und erhalten Sie den Index des Mindestwerts
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