我有一个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])