Python / Numpy: Triangle mask from point mask -


i'm working triangulated mesh consisting of points 3 x n , triangles specified point indices 3 x m. can plot e.g. using mlab

mesh = mlab.triangular_mesh(p[0,:],p[1,:],p[2,:],t.t

i generating mask masking points out of bounds or nan, have mask size of n. want mask triangles have masked point. solutions far:

1: use mask turn masked points nan, e.g.

p[mask] = nan 

mlab still shows nan (i need include threshold filter...) , don't want mess data

2: generating triangle mask, started this

def trianglemask(triangles, pointmask):     maskedtris = np.zeros((triangles.shape[1]), dtype=np.bool)     maskedidx = np.nonzero(pointmask)[0]     i,t in enumerate(triangles.t):          if (i%5000) == 0:              print('working it.:', i)          p in t:              if p in maskedidx:                  maskedtris[i] = true                  break      return maskedtris 

this works, not fast. , in case, n = 250.000 , m = 500.000, "not fast" quite problem.

i know there's mask keyword in mlab, cant work. masking points in triangular_mesh call yields , error since t refers indices larger size of p.

so have points array of shape (3, n), triangles array of shape (3, m) , point_mask boolean array of shape (n,), , create triangle_mask of shape (m,) holding true @ position j if of indices in triangles[:, j] corresponds true in point_mask. can little bit of fancy indexing:

triangle_mask = np.any(point_mask[triangles], axis=0) 

to understand what's going on, point_mask[triangles] creates boolean array of shape (3, m), value @ position (i, j) being point_mask[triangles[i, j]].


Comments

Popular posts from this blog

Ansible - ERROR! the field 'hosts' is required but was not set -

customize file_field button ruby on rails -

SoapUI on windows 10 - high DPI/4K scaling issue -