说我有一些长数组和一个索引列表。如何选择除那些指数以外的所有内容?我找到了一个解决方案,但它并不优雅:
import numpy as np
x = np.array([0,10,20,30,40,50,60])
exclude = [1, 3, 5]
print x[list(set(range(len(x))) - set(exclude))]
答案 0 :(得分:11)
np.delete
会根据您提供的内容做各种事情,但在这种情况下,它使用的掩码如下:
In [604]: mask = np.ones(x.shape, bool)
In [605]: mask[exclude] = False
In [606]: mask
Out[606]: array([ True, False, True, False, True, False, True], dtype=bool)
In [607]: x[mask]
Out[607]: array([ 0, 20, 40, 60])
答案 1 :(得分:2)
np.in1d
或np.isin
基于exclude
创建布尔索引可能是另一种选择:
x[~np.isin(np.arange(len(x)), exclude)]
# array([ 0, 20, 40, 60])
x[~np.in1d(np.arange(len(x)), exclude)]
# array([ 0, 20, 40, 60])
答案 2 :(得分:0)
您还可以对索引使用列表推导
>>> x[[z for z in range(x.size) if not z in exclude]]
array([ 0, 20, 40, 60])