Вы можете использовать np.where
для анализа нескольких сравнений, например, так:
импорт numpy как np
a = np.array([[0, 0, 0],
[1, 2, 3],
[6, 7, 7],
[9, 0, 0],
[0, 9, 0],
[0, 0, 9],
[-10, 0, 0]])
print(a[(a[:, 0] < 8 ) & (a[:, 0] >= 0) & (a[:, 1] < 8) & (a[:, 1] >= 0) & (a[:, 2] < 8) & (a[:, 2] >= 0)])
>>>[[0 0 0]
[1 2 3]
[6 7 7]]
Как это работает, если что, если любое из утверждений:
- (a [:, 0] <8) </li>
- (a [:, 0]> = 0)
- (a [:, 1] <8 ) </li>
- (a [:, 1]> = 0)
- (a [:, 2] <8) </li>
- (a [:, 2]> = 0 ))
- это False
, он вернет значение False, если любое из них равно False
, побитовый компаратор возвращает значение False для всего оператора (подробнее см. 'и' (булево) против '&' (поразрядно) - Почему разница в поведении со списками против numpy массивов? ).
Это должно быть достаточно быстро, для массива длиной 10000000, это займет у меня 0,43 секунды до запуска.