如何在NumPy数组中删除指定值元素(传入值列表而非索引)
如何删除NumPy数组中指定值的元素?
np.delete的第二个参数接收的是索引列表而非值列表,所以你直接传入values_to_remove时,实际删除的是原数组中索引为2、3、6的元素(对应值3、4、7),这和你的需求不符。
下面是两种可行的修改方案:
方案一:布尔索引(推荐,保留原顺序和重复项)
利用np.isin生成掩码,筛选出不在待删除值列表中的元素:
import numpy as np a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) values_to_remove = [2, 3, 6] # 生成掩码:元素不在待删除列表中则为True mask = ~np.isin(a, values_to_remove) new_a = a[mask] print(new_a) # 输出: [1 4 5 7 8 9]
np.isin(a, values_to_remove)会返回一个布尔数组,标记每个元素是否在待删除列表中~符号对布尔数组取反,得到需要保留的元素的掩码- 用掩码索引原数组,即可得到删除指定值后的结果
方案二:集合差集(自动排序、去重)
如果不在意元素顺序,且不需要保留重复项,可以用np.setdiff1d:
import numpy as np a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) values_to_remove = [2, 3, 6] new_a = np.setdiff1d(a, values_to_remove) print(new_a) # 输出: [1 4 5 7 8 9]
注意:这个方法会返回排序后的数组,并且自动去除原数组中的重复元素。
内容的提问来源于stack exchange,提问作者EGM8686
相关产品推荐
相关产品推荐

