ich habe eine Funktion geschrieben, mit der ich aus einem numpy-array von 3d koordinaten doppelt auftretende punkte eliminiere.
Dazu benutze ich den cKD_Tree von scipy (version 0.15.1) und die funktion "query_pairs". Im Großen und Ganzen funktioniert das Ganze. Werden die Listen der Knoten-Koordinaten jedoch groß
treten vermehrt fehler auf. Hier mein Beispiel Code (dazu benötigt wird die Liste der knoten https://www.dropbox.com/s/orkj868iuh01g ... s.txt?dl=0 ):
Code: Alles auswählen
import numpy as np
import scipy.spatial
def rm_coincident_nodes(nodes,delta=10**-9):
cKD_TREE = scipy.spatial.cKDTree( nodes ) # BUILD KD_TREE
coincident_pairs= np.array( list(cKD_TREE.query_pairs( delta )) ) # GET ALL PAIRS WITH A SMALLER DISTANCE THAN delta
idx = np.arange( 0, len(nodes) ) # INITIALIZE INDEX CORRELATION ARRAY
idx[coincident_pairs[:,1]] = coincident_pairs[:,0] # CORRELATE COINCIDENT PAIRS WITH INDEX
unique_ids = np.unique(idx) # FILTER UNIQUE NODE IDS
nodes = nodes[unique_ids] # GET UNIQUE NODES
return nodes
nodes = np.genfromtxt('nodes.txt') # READ NODES
new_nodes = rm_coincident_nodes(nodes,delta=10**-9) # REMOVE COINCIDENT NODES
print 'Number of new_nodes ',len(new_nodes)
print 'node 29700',new_nodes[29700]
print 'node 3733',new_nodes[3733]
new_new_nodes = rm_coincident_nodes(new_nodes,delta=10**-9) # REMOVE COINCIDENT NODES
print 'Number of new_new_nodes ',len(new_new_nodes)
Code: Alles auswählen
>>> Number of new_nodes 32045
>>> node 29700 [ 1. 0.793401 1. ]
>>> node 3733 [ 1. 0.793401 1. ]
>>> Number of new_new_nodes 32038
P.S: Kann man hier auch Anhänge hochladen?