Ich versuche, übereinstimmende Elemente in einer großen Anzahl von großen numpy Arrays zu finden. Die Art und Weise, wie ich das zurzeit mache (die Arrays in einem Wörterbuch zu halten und sie mehrmals zu durchlaufen) ist sehr langsam und ich suche nach einer schnelleren Möglichkeit, das Problem anzugehen.Schneller Weg, um übereinstimmende Elemente in mehreren numply Arrays zu finden
Hier ist eine in sich geschlossene Codeabschnitt, der das Problem präsentiert:
import numpy as np
data = {}
for frame in xrange(100):
data[frame] = np.random.randint(100, size=(100, 3))
# data structure is 100 'pages' each containing an array of 100 elements
# trying to find matching elements from arrays on different pages
for page in data:
for point in data[page]:
for page_to_match in data:
if page_to_match == page: # exclude matches on the same page
pass
else:
for point_to_match in data[page_to_match]:
if np.array_equal(point, point_to_match):
print 'Found a match -', point, '- pages:', page, page_to_match
# should find about 0 - 3 matches per page
Wie Sie es funktioniert, aber sehr schlecht sehen.
Bearbeiten: Hier ist eine minimale Version des Codes. Es funktioniert schnell für kleine Arrays wie dieses, aber langsam für große Arrays wie oben. Ersetzen Sie die ersten drei Zeilen in dem obigen Abschnitt mit dem folgenden:
data = {}
data[0] = np.array([[1,2],[3,4]])
data[1] = np.array([[5,6],[7,8]])
data[2] = np.array([[3,4],[5,8]])
Können Sie genau definieren, was Sie wollen? –
Können Sie einen minimalen Beispielfall hinzufügen? – Divakar
@ juanpa.arrivillaga Ich möchte Übereinstimmungen zwischen den Seiten für die weitere Verarbeitung identifizieren –