Это самый быстрый способ, которым я мог придумать:
import numpy
x = numpy.arange(1000000, dtype=numpy.int32).reshape((-1,2))
bad = numpy.arange(0, 1000000, 2000, dtype=numpy.int32)
print x.shape
print bad.shape
cleared = numpy.delete(x, numpy.where(numpy.in1d(x[:,0], bad)), 0)
print cleared.shape
Это печатает:
(500000, 2)
(500,)
(499500, 2)
и работает намного быстрее, чем уфунк. Он будет использовать некоторую дополнительную память, но будет ли это нормально для вас, зависит от размера вашего массива.
Пояснение:
- numpy.in1d возвращает массив того же размера, что и
x
содержащий True
, если элемент находится в массиве bad
, и
False
в противном случае.
- numpy.where превращает этот массив
True
/ False
в массив целых чисел, содержащий значения индекса, где массив был True
.
- Затем он передает местоположения индекса в numpy.delete , приказывая удалить по первой оси (0)