ranges = [(10, 20), (25, 30), (50, 100)]
mask = np.ones(len(array), dtype=bool)
for start, end in ranges:
    mask[start:stop] = False
How can one efficiently remove a range of rows from a large numpy array?