Python 基于numpy中的顶点坐标选择网格的面

Python 基于numpy中的顶点坐标选择网格的面,python,numpy,indexing,mesh,matrix-indexing,Python,Numpy,Indexing,Mesh,Matrix Indexing,我有两个numpy数组,一个用于网格的3D顶点,称为vert,另一个用于三角形面,称为faces: vert数组是一个nx3形状的float数组,因此有N个三维点。每个点的x坐标可以有正值和负值。 作为一个纯粹的例子,这可以是vert数组: [[ 2.886495 24.886948 15.909558] [ -13.916695 -58.985245 19.655312] [ 40.415527 8.968353 8.515955] ... [ 13.392465 -5

我有两个numpy数组,一个用于网格的3D顶点,称为
vert
,另一个用于三角形面,称为
faces

vert
数组是一个
nx3
形状的
float
数组,因此有N个三维点。每个点的
x
坐标可以有正值和负值。 作为一个纯粹的例子,这可以是
vert
数组:

[[  2.886495  24.886948  15.909558]
 [ -13.916695 -58.985245  19.655312]
 [ 40.415527   8.968353   8.515955]
 ...
 [ 13.392465 -58.20602   18.752457]
 [ -12.504704 -58.307934  18.912386]
 [ 13.322185 -58.52817   19.165733]]
由于网格居中,因此网格的左侧部分是具有正x分量的部分,相应的顶点索引由
np找到。其中

i_vert_left = np.where(vert[:,0]>0)[0]
我现在想过滤掉那些由三角形组成的面,这些三角形的坐标完全在正
x
轴上

但是,我在正确执行此索引操作时遇到了一个问题。 我的第一次尝试是对面进行子集,使其对应的顶点具有
x>0

faces_left = np.asarray([f for f in faces if np.all(np.isin(i_vert_left,f)) ])
但在大网格上,操作速度非常慢。
如何利用面智能索引?

假设
是一个
Nx3
整数数组,索引每个三角形的三个顶点,我认为您应该只需要:

# Check whether each vertex is left or not
vert_left_mask = vert[:, 0] > 0
# Check whether each face has all vertices on left or not
faces_left_mask = np.all(vert_left_mask[faces], axis=1)
# Select resulting left faces
faces_left = faces[faces_left_mask]

这里的主要“技巧”是在
vert\u left\u mask[faces]
中,它将每个整数顶点数替换为一个布尔值,指示顶点是否左,因此很容易判断哪个面完全左对齐
np。所有
面都是什么样的?形状?