我正在使用由点3 x n和点指数3 x m指定的三角形组成的三角网格。我可以很容易地绘制一个使用mlab
mesh = mlab.triangular_mesh(p[0,:],p[1,:],p[2,:],t.T
我也在生成一个超出范围或nan
的掩码掩蔽点,所以我有一个大小为n的掩码。现在我想掩盖具有蒙版点的三角形。到目前为止我的解决方案:
1:使用遮罩将所有遮盖的点转换为nan
,例如
p[mask] = nan
mlab
然后仍显示nan
(我需要包含一个阈值过滤器......)而且我实际上不想弄乱我的数据
2:生成一个三角形蒙版,我这样开始
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
这有效,但速度不快。在我的情况下,n = 250.000和m = 500.000,所以“不快”是一个很大的问题。
我知道mlab
中有一个掩码关键字,但我无法让它工作。仅屏蔽triangular_mesh调用中的点产生和误差,因为t然后指的是大于p的大小的索引。
答案 0 :(得分:0)
所以你有一个points
形状的数组(3, n)
,一个形状为triangles
的{{1}}数组和一个形状为(3, m)
的{{1}}布尔数组如果point_mask
中的任何索引对应于{{1},则希望在(n,)
位置创建triangle_mask
形状(m,)
True
在j
中。你可以通过一些花哨的索引来做到这一点:
triangles[:, j]
要了解正在发生的事情,True
会创建一个形状为point_mask
的布尔数组,位置triangle_mask = np.any(point_mask[triangles], axis=0)
的值为point_mask[triangles]
。