Schnelleres finden und ersetzen von gleichen Integer-Paaren

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
schneitzmaster
User
Beiträge: 94
Registriert: Freitag 26. Oktober 2012, 15:35
Wohnort: Hamburg

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
Antworten