Die Numpy-Arrays haben die folgende Struktur:
Code: Select all
ch1 = array([ 41, 53, 334, ..., 1180949, 1181054, 1181081], shape=(N,))
ch2 = array([ 85, 221, 335, ..., 1180996, 1181055, 1181087], shape=(M,)))
Was ich versuche, ist, die Elemente von ch1 zu zählen, die sich von den Elementen von unterscheiden ch2 um 1. Um ein Beispiel zu geben: Betrachtet man die Arrays oben, unterscheidet sich das Element 334 von ch1 um 1 vom Element 335 von ch2, daher zählen wir diesen Eintrag. Das Gleiche gilt für Eintrag 1181054 von ch1 und Eintrag 1181055 von ch2.
Die Art und Weise, wie die Arrays erstellt werden, stellt sicher, dass es in jedem Array nur ein Element gibt, das die Einschränkung erfüllt, da:
- zwei aufeinanderfolgende Zahlen in jedem Array mindestens 2 Einheiten voneinander entfernt sind, z. B. ch1 = array([3, 25, ..., 32, 34, ..., 18762, 18764, ...])
- Wenn sich zwei Elemente in einem Array um 2 unterscheiden, dann hat das andere Array nicht die Zahl zwischen den beiden, d. h. wenn wir in ch2 die Elemente 41 und 43 haben, dann wird ch1 kein Element haben 42, aber entweder Element 40 oder 44
- für jedes gegebene Element eines Arrays gibt es nur ein Element des anderen Arrays, das sich um 1 Einheit unterscheidet
Gibt es eine Möglichkeit, diese Schleife zu vektorisieren, da dieser Vergleich zwischen den beiden Arrays zwischen Tausenden von Array-Paaren implementiert werden muss und dies mehr als bedeuten würde 100.000 Iterationen.
Code: Select all
counter = 0
for elm in ch1:
t_diff = elm - ch2
found, = numpy.nonzero(numpy.abs(t_diff) == 1)
if found.size > 0:
counter += 1
Mobile version