Проверьте, попадает ли числовой массив в границы

1

Ищите более эффективный способ проверить, попадают ли элементы в массив numpy в любой (или не менее чем один раз) набор значений min и max. Я играл с any() и np.any() и all() но для меня это более новые понятия.

y_minmax_bounds = [[1.1, 2.0], [3.3, 6.21], [5.75, 10.0]]
y = np.array([1.5, 2.5, 2, 6, 8, 10])
withinbounds = [((y > min) & (y < max))for min, max in y_minmax_bounds]
print(withinbounds)

Возвращает:

[array([True, False, False, False, False, False]), 
array([False, False, False,  True, False, False]), 
array([False, False, False,  True,  True, False])]

После решения массива:

[True False False True True False]

Я могу y_minmax_bounds, но это кажется неэффективным, учитывая очень большой np.array для проверки. Реальная проблема также будет применяться в нескольких измерениях (x_minmax_bounds на x, z_minmax_bounds по z).

  • 0
    Только 10 не попадает между, по крайней мере, одним интервалом.
  • 0
    Извинения - я отредактировал опечатку в y_minmax_bounds , которая также устанавливает 2.5 и 2 как False.
Показать ещё 1 комментарий
Теги:
pandas
numpy

1 ответ

2
Лучший ответ

С трансляцией Numpy

mn, mx = np.array(y_minmax_bounds).T
x = y[:, None]

((x > mn) & (x < mx)).any(1)

array([ True, False, False,  True,  True, False])
  • 0
    Огромное спасибо! Много переварить и научиться здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню