python - 在 3D numpy-array 中搜索多个 1D numpy-array
问题描述
我从表面扫描中得到了一个 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]]])
推荐阅读
- oracle - 在 oracle 中更新 CLOB 时出错:ORA-00600:[kcfrbd_2]
- python - 在二维 numpy 数组中查找最常见的字符串
- python - 是否可以将数据帧传递给每行都有一个 numpy 数组的 TF/Keras?
- python - 如何从python中的df中减去(最后一列,最后一行)减去(最后一列,第一行)
- graphdb - FROM 关键字不检索远程三元组
- javascript - 使用下拉内容中单击选项的值更改 dropbtn 文本
- angular - Angular - 找不到模块“ngx-thread”
- python - 无法安装pocketsphinx
- c# - DataGrid向单元格按钮添加功能
- java - 如何编写一个 do while 循环以要求用户输入数字并在输入的数字为 0 时终止循环