Python 在3D numpy阵列中搜索多个1D numpy阵列

Python 在3D numpy阵列中搜索多个1D numpy阵列,python,arrays,numpy,multidimensional-array,numpy-ndarray,Python,Arrays,Numpy,Multidimensional Array,Numpy Ndarray,我从表面扫描得到了一个stl文件。从中我得到了每个三角形的3D数组,它有3个点和它们的x,y,z坐标 现在,要查找与另一个具有点的x、y、z坐标的二维阵列(也可以是列表,格式没有那么重要)共有2个点的所有三角形 我的3D阵列的示例数据如下 Triangle= np.array([[[0, 1, 1], [1, 0, 1], [1, 1, 2]], [[0, 0, 1], [1, 0, 1], [0, 1, 1]],

我从表面扫描得到了一个stl文件。从中我得到了每个三角形的3D数组,它有3个点和它们的x,y,z坐标

现在,要查找与另一个具有点的x、y、z坐标的二维阵列(也可以是列表,格式没有那么重要)共有2个点的所有三角形

我的3D阵列的示例数据如下

Triangle= np.array([[[0, 1, 1],
        [1, 0, 1],
        [1, 1, 2]],

       [[0, 0, 1],
        [1, 0, 1],
        [0, 1, 1]],

       [[3, 0, 1],
        [3, 1, 1],
        [2, 0, 2]],

       [[2, 0, 2],
        [3, 1, 1],
        [2, 1, 2]],

       [[1, 1, 2],
        [1, 0, 1],
        [2, 0, 2]],

       [[2, 0, 2],
        [2, 1, 2],
        [1, 1, 2]],

       [[1, 2, 3],
        [0, 1, 1],
        [1, 1, 2]],

       [[1, 2, 3],
        [0, 2, 1],
        [0, 1, 1]],

       [[0, 3, 1],
        [0, 2, 1],
        [1, 3, 2]],

       [[0, 2, 1],
        [1, 2, 3],
        [1, 3, 2]],

       [[1, 1, 2],
        [2, 1, 2],
        [2, 2, 1]],

       [[2, 2, 1],
        [1, 2, 3],
        [1, 1, 2]],

       [[2, 1, 2],
        [3, 1, 1],
        [2, 2, 1]],

       [[3, 1, 1],
        [3, 2, 1],
        [2, 2, 1]],

       [[2, 3, 1],
        [3, 2, 1],
        [3, 3, 1]],

       [[2, 3, 1],
        [2, 2, 1],
        [3, 2, 1]],

       [[2, 3, 1],
        [1, 3, 2],
        [1, 2, 3]],

       [[1, 2, 3],
        [2, 2, 1],
        [2, 3, 1]]])

至于要点呢

points = np.array([[1, 2, 3],
       [0, 1, 1],
       [0, 2, 1],
       [1, 1, 2],
       [1, 3, 2],
       [2, 2, 1],
       [2, 3, 1]])

让我们尝试将所有三角形与所有点进行比较:

compare = (Triangle[:,:,None,:] == points[None,None,...])

# `all` check if all the coordinates to be equal,
# `sum` counts the equal points 
mask = compare.all(axis=-1).sum(axis=(-2,-1)) >=2

Triangle[mask]
输出:

array([[[0, 1, 1],
        [1, 0, 1],
        [1, 1, 2]],

       [[1, 2, 3],
        [0, 1, 1],
        [1, 1, 2]],

       [[1, 2, 3],
        [0, 2, 1],
        [0, 1, 1]],

       [[0, 3, 1],
        [0, 2, 1],
        [1, 3, 2]],

       [[0, 2, 1],
        [1, 2, 3],
        [1, 3, 2]],

       [[1, 1, 2],
        [2, 1, 2],
        [2, 2, 1]],

       [[2, 2, 1],
        [1, 2, 3],
        [1, 1, 2]],

       [[2, 3, 1],
        [2, 2, 1],
        [3, 2, 1]],

       [[2, 3, 1],
        [1, 3, 2],
        [1, 2, 3]],

       [[1, 2, 3],
        [2, 2, 1],
        [2, 3, 1]]])