Чтобы узнать элементы Numpy массива, который проверяет два условия, можно использовать оператор *
:Логическое ИЛИ без использования numpy.logical_or
>>> a = np.array([[1,10,2],[2,-6,8]])
>>> a
array([[ 1, 10, 7],
[ 2, -6, 8]])
>>> (a <= 6) * (a%2 == 0) # elements that are even AND inferior or equal to 6
array([[False, False, False],
[ True, True, False]], dtype=bool)
Но как OR? Я пытался это сделать:
>>> (a%2 == 0) + (a <= 6) - (a%2 == 0) * (a <= 6)
array([[ True, True, False],
[False, False, True]], dtype=bool)
, но результат является ложным для элементов, которые проверяют оба условия. Я не понимаю, почему.
Я не вижу оператора ИЛИ. – HavelTheGreat
Арифметические операции с numpy boolean являются дрянными, это не лучшая идея полагаться на них. Плюс они делают ваш код неясным и трудно интерпретируемым. Если вы имеете дело с булевыми массивами, используйте побитовые операторы: '&' for и, '|' для или, '^' для xor и '~' для нет. – Jaime
В случае, если ответ решит вашу проблему, примите его как решение, например [здесь] (http://meta.stackoverflow.com/a/251399/4367286) – plonser