Ich arbeite mit einem triangulierten Netz, das aus Punkten 3 x n und Dreiecken besteht, die durch die Punktindizes 3 x m angegeben werden. Ich kann das z.B. mit MLabPython/Numpy: Dreiecksmaske von Punktmaske
mesh = mlab.triangular_mesh(p[0,:],p[1,:],p[2,:],t.T
ich auch eine Maske Maskierung Punkte bin zu erzeugen, die außerhalb der Grenzen oder nan
sind, so habe ich eine Maske, um die Größe von n. Jetzt möchte ich die Dreiecke maskieren, die einen maskierten Punkt haben. Meine Lösungen bisher:
1: Verwenden Sie die Maske, um alle maskierten Punkte in nan
, z.
p[mask] = nan
mlab
zeigt dann noch nan
(ich würde einen Schwellenwert Filter enthalten müssen ...) und ich will eigentlich nicht zu verwirren mit meinen Daten
2: ein Dreieck Maske generieren, die begann ich wie diese
def triangleMask(triangles, pointmask):
maskedTris = np.zeros((triangles.shape[1]), dtype=np.bool)
maskedIdx = np.nonzero(pointmask)[0]
for i,t in enumerate(triangles.T):
if (i%5000) == 0:
print('working it.:', i)
for p in t:
if p in maskedIdx:
maskedTris[i] = True
break
return maskedTris
Dies funktioniert, aber nicht schnell. Und in meinem Fall, n = 250.000 und m = 500.000, ist "nicht schnell" ein ziemliches Problem.
Ich weiß, dass es ein Maskenschlüsselwort in mlab
gibt, aber ich kann es nicht zum Funktionieren bringen. Maskieren nur die Punkte in den dreieckigen_mesh-Aufruf-Erträgen und Fehlern, da sich t dann auf Indizes bezieht, die größer sind als die Größe von p.
Vermutung, das ist ziemlich ähnlich zu dem, was ich in meinem Loop-Lösung tat. Nur dass es eine Million mal schneller ist. Funktioniert super, danke! – Max