Extrahieren Sie den Wert, der einem Wert am nächsten kommt, aus einem Listenelement in Python

Beachten Sie, dass es einige Zeit gedauert hat, den Wert, der einem bestimmten Wert am nächsten kommt, aus der Liste in Python abzurufen.

Fehlerbeispiel

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.

Lösung

~~ 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

Extrahieren Sie den Wert, der einem Wert am nächsten kommt, aus einem Listenelement in Python
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
Python Amateur versucht die Liste zusammenzufassen ②
[Python] So entfernen Sie doppelte Werte aus der Liste
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
Python / Machen Sie ein Diktat aus einer Liste.
Extrahieren Sie den Wert von dict oder list als Zeichenfolge
So finden Sie das erste Element, das den Kriterien in der Python-Liste entspricht
So bestimmen Sie die Existenz eines Selenelements in Python
Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren
Übergeben Sie die Liste von Python an C ++ als Referenz in pybind11
So entfernen Sie Duplikate aus einer Python-Liste unter Beibehaltung der Reihenfolge.
Finden Sie alle Muster, um eine bestimmte Zahl aus dem Satz zu extrahieren
[Python] Ein Programm, das den Inhalt der Liste nach links dreht
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
# 5 [python3] Extrahiert Zeichen aus einer Zeichenfolge
Python Amateur versucht die Liste zusammenzufassen ①
[Python] Was ist ein formales Argument? So stellen Sie den Anfangswert ein
Extrahieren Sie mit Python Zeilen, die den Bedingungen entsprechen, aus einer Textdatei
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)
[Python] Verwendung der Aufzählungsfunktion (Indexnummer und Element extrahieren)
[Python] Listenverständnis Verschiedene Möglichkeiten zum Erstellen einer Liste
Bearbeiten Sie Excel in Python, um eine Pivot-Tabelle zu erstellen
So öffnen Sie einen Webbrowser über Python
So löschen Sie einen Taple in einer Liste (Python)
Kopieren Sie die Liste in Python
So generieren Sie ein Python-Objekt aus JSON
So extrahieren Sie den Koeffizienten aus der Minutenformel
Python Hinweis: Wenn Sie einer Zeichenfolge einen Wert zuweisen
[Algorithmus x Python] Verwendung der Liste
[Python] Wirf eine Nachricht an den Slack-Kanal
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
[Python] So sortieren Sie nach dem N-ten M-ten Element eines mehrdimensionalen Arrays
Verwenden Sie PIL in Python, um nur die gewünschten Daten aus Exif zu extrahieren
[Python] Lösung für das Problem, dass Elemente beim Kopieren einer Liste verknüpft werden
Python-Skript zum Abrufen einer Liste von Eingabebeispielen für den AtCoder-Wettbewerb
[Python] Ich habe versucht, den Typnamen als Zeichenfolge aus der Typfunktion abzurufen
Extrahieren Sie Elemente (mithilfe einer Liste von Indizes) wie NumPy aus einer Python-Liste / einem Python
[Python-Tipps] So rufen Sie mehrere Schlüssel mit dem Maximalwert aus dem Wörterbuch ab
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
So rufen Sie den n-ten größten Wert in Python ab
Die Wand beim Ändern des Django-Dienstes von Python 2.7 auf Python 3-Serie
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
Python zeigt aus der Perspektive eines C-Sprachprogrammierers
Ich wollte die Python-Bibliothek von MATLAB verwenden
Beachten Sie beim Initialisieren einer Liste in Python
Vom Kauf eines Computers bis zur Ausführung eines Programms auf Python
Der erste Schritt, um Blender von Python verfügbar zu machen
[Python] Ich möchte aus einer verschachtelten Liste einen Taple machen
Betrachten Sie die Konvertierung von Python rekursiv in nicht rekursiv
So veröffentlichen Sie ein Ticket über die Shogun-API
Python-Skript, das eine JSON-Datei aus einer CSV-Datei erstellt
[Python] So geben Sie Listenwerte der Reihe nach aus
[Python] So rufen Sie eine Funktion von c aus Python auf (ctypes edition)