Достаточно просто присоединиться к соответствующим aranges
:
In [14]: np.r_[0:3,5:7]
Out[14]: array([0, 1, 2, 5, 6])
In [15]: np.concatenate([np.arange(i,j) for i,j in selection_idx])
Out[15]: array([0, 1, 2, 5, 6])
Я не вижу никаких свидетельств того, что конструкция pandas
обеспечивает какие-либо преимущества в производительности. Отображение выглядит просто как слегка обработанные атрибуты из входных кортежей.
===
Вот способ построения маски без al oop по итерациям. Для этого небольшого случая это, вероятно, медленнее, чем мой concatenate
, но со многими кортежами это может быть быстрее:
In [42]: idx=np.array(selection_idx)
In [43]: idx
Out[43]:
array([[0, 3],
[5, 7]])
In [44]: l0=idx[:,[0]]<=np.arange(7)
In [45]: l1=idx[:,[1]]>np.arange(7)
In [46]: l0 & l1
Out[46]:
array([[ True, True, True, False, False, False, False],
[False, False, False, False, False, True, True]])
In [47]: np.any(l0&l1, axis=0)
Out[47]: array([ True, True, True, False, False, True, True])