如何删除NumPy数组中仅包含指定数字组合的行
实现方法
核心逻辑是逐行校验三角面的所有顶点是否全部属于指定索引集合,过滤掉符合删除条件的行即可,用NumPy内置向量化实现不需要写循环,运行效率高。
直接上可运行代码:
import numpy as np faces = np.array([[4, 0, 1], [5, 4, 1], [7, 5, 1], [7, 5, 4], [3, 0, 1], [7, 3, 1], [4, 2, 0], [6, 4, 2], [7, 6, 2], [7, 6, 4], [3, 2, 0], [7, 3, 2]]) indices = [0, 1, 2, 3] # 生成待删除行的布尔掩码 row_all_in_indices = np.isin(faces, indices).all(axis=1) # 过滤掉待删除行 result = faces[~row_all_in_indices]
逻辑说明
np.isin(faces, indices)会返回和faces维度一致的布尔数组,对应位置的顶点编号如果在indices列表中则值为True,否则为False.all(axis=1)按行做全真判断,某行返回True就代表这个三角面的三个顶点全部属于目标索引集合,就是需要删除的行- 最后对掩码取反,保留所有不满足删除条件的行即可
运行后得到的result输出如下,已经精准删除了两行目标数据:
array([[4, 0, 1], [5, 4, 1], [7, 5, 1], [7, 5, 4], [7, 3, 1], [4, 2, 0], [6, 4, 2], [7, 6, 2], [7, 6, 4], [7, 3, 2]])
这个方法不需要考虑三角面内顶点的排列顺序,只要三个顶点都在指定索引列表里就会被识别删除,完全匹配三角剖分数据的处理需求。
内容的提问来源于stack exchange,提问作者Nico Su
相关产品推荐
相关产品推荐

