Seite 1 von 1

Schnelleres finden und ersetzen von gleichen Integer-Paaren

Verfasst: Donnerstag 21. Januar 2016, 17:34
von schneitzmaster
Hallo Leute,

ich habe einen 2D-array (pairs) gefüllt mit Integern die gemeinsame Paare aus einer
scipy.spatial.cKDTree( pnts ).query_pairs(delta)
abfrage darstellen. Nun möchte ich alle verknüpften Paare zusammenbringen. Dafür soll zunächst der Schnitt aus beiden Spalten leer sein (keine Integer die in der linken und rechten Spalte zu finden sind).
Mein funktionierender Code dazu sieht wie folgt aus:

Code: Alles auswählen

import numpy as np
pairs = np.array([[1,2],
                  [2,3],
                  [3,5],                 
                  [3,4],
                  [5,7],
                  [10,11],
                  [10,12],
                  [13,14]])
dbl_ids  = np.intersect1d(pairs[:,0],pairs[:,1]) # get integer of connected pairs
# connect pairs by merging integers
for dbl_id in dbl_ids:    
    master_integer          = pairs[np.argmax(dbl_id==pairs[:,1]),0]
    pairs[pairs[:,0]==dbl_id,0]=master_integer # overwrite slave integer

print pairs
und bring das Ergebnis:

Code: Alles auswählen

>>> print pairs
[[ 1  2]
 [ 1  3]
 [ 1  5]
 [ 1  4]
 [ 1  7]
 [10 11]
 [10 12]
 [13 14]]
Wenn der pairs-array sehr groß wird dauert die for-Schleife sehr lang. Gibt es da eine schnellere Variante? Habt ihr vielleicht eine Idee?
Viele Grüße
Schneitzmaster