tutorial multiplicacion matriz matrices identidad funcion español elementos ejemplos array arange agregar python numpy boolean-operations

python - multiplicacion - Cómo realizar operaciones booleanas de elementos sabios en matrices numpy



numpy tutorial español pdf (4)

¿Has probado esto?

mask = (foo < 40) | (foo > 60)

Nota: el método __or__ en un objeto sobrecarga el operador bit a bit ( | ), no el operador booleano.

Por ejemplo, me gustaría crear una máscara que enmascare elementos con valor entre 40 y 60:

foo = np.asanyarray(range(100)) mask = (foo < 40).__or__(foo > 60)

Lo cual simplemente se ve feo, no puedo escribir:

(foo < 40) or (foo > 60)

porque termino con:

ValueError Traceback (most recent call last) ... ----> 1 (foo < 40) or (foo > 60) ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

¿Hay alguna manera canónica de hacer operaciones booleanas de elemento sabio en matrices numpy que con un código atractivo?



Si tiene comparaciones dentro de solo booleanos, como en su ejemplo, puede usar el operador O bit a bit | como lo sugirió Jcollado. Pero ten cuidado, esto puede darte resultados extraños si alguna vez utilizas elementos no booleanos, como mask = (foo < 40) | override mask = (foo < 40) | override Solo mientras la override garantizada sea False, True, 1 o 0, está usted bien.

Más general es el uso de los operadores del conjunto de comparación de np.any , np.any y np.all . Este fragmento devuelve todos los valores entre 35 y 45, que son menos de 40 o no un múltiplo de 3:

import numpy as np foo = np.arange(35, 46) mask = np.any([(foo < 40), (foo % 3)], axis=0) print foo[mask] OUTPUT: array([35, 36, 37, 38, 39, 40, 41, 43, 44])

No es tan bueno como con | , pero es más bonito que el código en tu pregunta.


Tenga en cuenta que puede usar ~ para la negación de elementos.

arr = np.array([False, True]) ~arr OUTPUT: array([ True, False], dtype=bool)

También & hace elementwise y

arr_1 = np.array([False, False, True, True]) arr_2 = np.array([False, True, False, True]) arr_1 & arr_2 OUTPUT: array([False, False, False, True], dtype=bool)

Estos también funcionan con Pandas Series

ser_1 = pd.Series([False, False, True, True]) ser_2 = pd.Series([False, True, False, True]) ser_1 & ser_2 OUTPUT: 0 False 1 False 2 False 3 True dtype: bool