这篇文章是对question的扩展。
我想从numpy数组中删除具有某些值的多个元素。那是
import numpy as np
a = np.array([1, 1, 2, 5, 6, 8, 8, 8, 9])
如何删除[1,5,8]每个值的一个实例,以使输出为[1,2,6,8,8,9]
。我在文档中找到的所有关于删除数组的方法都是使用np.setdiff1d
,但这会删除每个数字的所有实例。如何更新?
答案 0 :(得分:1)
使用外部比较,argmax
仅删除一次。对于大型阵列,这将占用大量内存,因为创建的掩码具有a.shape * r.shape
个元素。
r = np.array([1, 5, 8])
m = (a == r[:, None]).argmax(1)
np.delete(a, m)
array([1, 2, 6, 8, 8, 9])
此做假设r
中的每个值至少在a
中出现一次,否则索引0
的值将从{{1 }}找不到匹配项,并将返回argmax
。
答案 1 :(得分:1)
delNums = [np.where(a == x)[0][0] for x in [1,5,8]]
a = np.delete(a, delNums)
在这里,delNums
包含值1,5,8的索引,而np.delete()将删除那些指定索引处的值
输出:
[1 2 6 8 8 9]