Легкий способ проверить, находится ли каждый элемент в массиве numpy между двумя значениями?

Мне было интересно, существует ли синтаксически простой способ проверки того, находится ли каждый элемент в массиве numpy между двумя числами.

Другими словами, так же, как numpy.array([1,2,3,4,5]) < 5 вернет array([True, True, True, True, False]), мне было интересно, можно ли это сделать что-то похожее на это:

1 < numpy.array([1,2,3,4,5]) < 5

... чтобы получить...

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

Я понимаю, что я могу получить это путем логической цепочки логических тестов, но я работаю через довольно сложный код, и я искал синтаксически чистое решение.

Какие-нибудь советы?

Ответ 1

одним из решений было бы:

a = numpy.array([1,2,3,4,5])
(a > 1).all() and (a < 5).all()

если вы хотите acutal массив правды vaues, просто используйте:

(a > 1) & (a < 5)

Ответ 2

Еще бы использовать numpy.any, вот пример

import numpy as np
a = np.array([1,2,3,4,5])
np.any((a < 1)|(a > 5 ))

Ответ 3

Вы также можете центрировать матрицу и использовать расстояние до 0

upper_limit = 5
lower_limit = 1
a = np.array([1,2,3,4,5])
your_mask = np.abs(a- 0.5*(upper_limit+lower_limit))<0.5*(upper_limit-lower_limit)

Следует иметь в виду, что сравнение будет симметричным с обеих сторон, поэтому оно может выполнять 1<x<5 или 1<=x<=5, но не 1<=x<5