Python中删除数组零行零列并识别被删除的行列
删除数组全零行/列并获取被删除的索引
直接修改你的代码,就能同时得到处理后的数组、被删除的行索引和列索引:
import numpy as np A1 = np.array([[0, 1, 2], [0, 0, 0], [0, 3, 4]]) # 标记非零元素 mask = A1 != 0 # 获取每行是否存在非零元素的布尔数组 row_has_nonzero = mask.any(axis=1) # 获取每列是否存在非零元素的布尔数组 col_has_nonzero = mask.any(axis=0) # 过滤全零行和列得到结果数组 A2 = A1[np.ix_(row_has_nonzero, col_has_nonzero)] # 获取被删除的行索引:取row_has_nonzero中为False的位置 deleted_rows = np.where(~row_has_nonzero)[0].tolist() # 获取被删除的列索引:取col_has_nonzero中为False的位置 deleted_cols = np.where(~col_has_nonzero)[0].tolist() # 按期望格式输出 print([A2]) print(f"{deleted_rows} 其中 {deleted_rows[0]} 是被删除的行") print(f"{deleted_cols} 其中 {deleted_cols[0]} 是被删除的列")
输出结果
[array([[1, 2], [3, 4]])] [1] 其中 1 是被删除的行 [0] 其中 0 是被删除的列
关键逻辑说明
mask.any(axis=1):遍历每一行,只要该行有至少一个非零元素就返回True,全零行则返回False~row_has_nonzero:对布尔数组取反,得到全零行的标记,再用np.where()提取对应的索引- 列的处理逻辑和行完全一致,只是把
axis设为0遍历列
内容的提问来源于stack exchange,提问作者rajunarlikar123
相关产品推荐
相关产品推荐

