Python 在3D numpy阵列中搜索多个1D numpy阵列
我从表面扫描得到了一个stl文件。从中我得到了每个三角形的3D数组,它有3个点和它们的x,y,z坐标 现在,要查找与另一个具有点的x、y、z坐标的二维阵列(也可以是列表,格式没有那么重要)共有2个点的所有三角形 我的3D阵列的示例数据如下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]],
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]]])