Ich habe eine Liste von komplexen Zahlen, für die ich den nächsten Wert in einer anderen Liste von komplexen Zahlen finden möchte.Finden Sie nächste Indizes für ein Array gegen alle Werte in einem anderen Array - Python/NumPy
Mein aktueller Ansatz mit numpy:
import numpy as np
refArray = np.random.random(16);
myArray = np.random.random(1000);
def find_nearest(array, value):
idx = (np.abs(array-value)).argmin()
return idx;
for value in np.nditer(myArray):
index = find_nearest(refArray, value);
print(index);
Leider dauert das Alter für eine große Menge von Werten. Gibt es eine schnellere oder mehr "pythonianische" Möglichkeit, jeden Wert in myArray mit dem nächsten Wert in refArray abzugleichen?
FYI: Ich brauche nicht unbedingt in meinem Skript numpy.
Wichtig: Die Reihenfolge sowohl von myArray als auch von refArray ist wichtig und sollte nicht geändert werden. Wenn Sortierung angewendet werden soll, sollte der ursprüngliche Index in irgendeiner Weise beibehalten werden.
In Bezug auf die zeitliche Komplexität wird ein * gleitendes Fenster * wahrscheinlich am effizientesten sein. –
Ich kann nicht sehen, dass ein Schiebefenster effizienter ist als die aktuelle Lösung. Nach meinem besten Verständnis ist die aktuelle Lösung O (n), auf die am besten zu hoffen ist. Dann müssen einige Kompromisse gemacht werden, um die Zeitkonstante zu minimieren. Aber das hängt davon ab, ob dein großer Fall dein Gedächtnis explodiert oder nicht. Wenn es sich nicht um ein Speicherproblem handelt, ist es vielleicht möglich, ein wenig von der Verwendung von Broadcasting zu profitieren und mehr "numpy" -Berechnungen zu verwenden, aber das könnte Sie ebenso verlangsamen, wenn RAM-Speicher ein Problem ist. – JohanL
@JohanL RAM ist kein Problem, die Zeit ist leider. Diese einfache Schleife war sowohl die einfachste als auch die beste Methode, die ich mir vorstellen konnte. Leider dauert die Anpassung bei Arraygrößen von ref = 64 und Werten = 200.000 mehr als 10 Sekunden, Ziel wäre unter einer Sekunde ... – Alexander