如何从NumPy二维矩阵中删除与指定数组完全相等的行
NumPy删除与指定数组完全匹配的行
核心实现
直接利用NumPy内置的广播机制和布尔索引实现,无需额外循环,执行效率高。
示例代码
import numpy as np # 定义输入矩阵与待匹配的目标数组 input_matrix = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]]) target_row = np.array([1,2,3]) # 核心过滤逻辑 filtered_matrix = input_matrix[~(input_matrix == target_row).all(axis=1)]
逻辑说明
input_matrix == target_row:触发NumPy广播机制,将目标数组与矩阵每一行逐元素对比,输出与原矩阵形状一致的布尔值矩阵.all(axis=1):沿行方向对布尔值做与运算,仅当整行所有元素都匹配目标数组时返回True,输出长度等于矩阵行数的一维布尔数组~:对布尔数组做取反操作,将需要删除的匹配行标记为False,保留行标记为True- 最后用处理后的布尔数组对原矩阵做索引,得到过滤后的结果
执行结果
运行上述代码输出的filtered_matrix即为要求的结果:
array([[4, 5, 6], [7, 8, 9]])
注意事项
- 需保证目标数组的长度与矩阵的列数一致,否则会触发广播报错
- 若需一次性删除多个匹配行,可将待删除的行整理为二维数组,使用
np.isin实现:# 示例:同时删除[1,2,3]和[7,8,9]两行 target_rows = np.array([[1,2,3], [7,8,9]]) filtered_matrix = input_matrix[~np.isin(input_matrix, target_rows).all(axis=1)]
内容的提问来源于stack exchange,提问作者Hadar Shavit
相关产品推荐
相关产品推荐

