如何删除numpy数组中的特定元素(传递值列表而非索引)



我有一个1d numpy数组和一个要删除的值列表(而不是索引(,我如何修改此代码以删除实际值而不是索引

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.delete(a, values_to_remove)

所以我想删除的是值2,3,6,而不是它们对应的索引。事实上,这个列表很长,所以理想情况下我应该能够将第二个参数作为列表传递

所以最后的数组实际上应该是=1,4,5,7,8,9

使用此:

import numpy as np    
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
values_to_remove = [2, 3, 6]
for i in range(0, len(values_to_remove)):
index = np.where(a==values_to_remove[i])
a = np.delete(a, index[0][0])
print(a)

输出:

[1 4 5 7 8 9]

您可以使用numpy.isin

如果你不介意复制:

out = a[~np.isin(a, values_to_remove)]

输出:array([1, 4, 5, 7, 8, 9])

更新到位:

np.delete(a, np.isin(a, values_to_remove))

更新的a:array([1, 4, 5, 7, 8, 9])

中间:

np.isin(a, values_to_remove)
# array([False,  True,  True, False, False,  True, False, False, False])

最新更新