numpy删除数组指定值时元素误删、形状异常如何修复
问题根因
你的代码出现异常结果是两个参数使用错误导致的:
- 调用
np.delete时未指定axis参数,函数默认会先将输入数组展平为一维,再执行删除操作,因此最终输出丢失了原二维结构 np.where(a == 2)对二维数组返回的是(匹配元素行索引数组, 匹配元素列索引数组)的二维坐标元组,直接传入删除函数时会匹配展平后的数组索引,导致索引位置错位,误删元素5。
修正代码
只需要两处调整:一是指定axis=0告知函数按行维度执行删除,二是从np.where的返回结果中提取行索引传入即可,修正后代码如下:
import numpy as np a = np.array([5,1,2,4,9,2]).reshape(-1, 1) print("before delete", a) # 提取值为2的元素对应的行索引,指定按行删除 a = np.delete(a, np.where(a == 2)[0], axis=0) print("after delete", a)
运行后输出完全符合预期:
before delete [[5] [1] [2] [4] [9] [2]] after delete [[5] [1] [4] [9]]
小提示:如果你的数组是多列结构,需要整行删除的判定条件是「某一列存在目标值」还是「整行所有元素都是目标值」,可以对应调整
np.where里的判断逻辑即可,axis=0按行删除的用法保持不变。
内容的提问来源于stack exchange,提问作者mahmood
相关产品推荐
相关产品推荐

