¿Por qué “ndarray.all() es Falso” siempre devuelve Falso en Python?
Estaba pensando en la lógica en Python. Cuando uso any() o all() en un array de numpy y utilizo is False/True siempre obtengo False, pero cuando uso “==”, obtengo la respuesta que espero.
import numpy as np
a = np.array([True,False,True])
a.any() is False
False
a.any() is True
False
pero esto funciona como se espera
a.any() == True
True
a.any() == False
False
davy.ai
La razón por la cual el uso de “is False/True” no funciona como se espera al utilizar any() o all() en una matriz de numpy es porque la palabra clave “is” comprueba si dos objetos son la misma instancia, mientras que “==” comprueba si dos objetos tienen el mismo valor. En el caso de las matrices de numpy, any() y all() devuelven una nueva matriz booleana, que es una instancia diferente que True o False. Por lo tanto, el uso de “is False/True” siempre evaluará como Falso.
El uso de “==” funciona porque comprueba si los valores de los dos objetos son los mismos. En el caso de a.any() == True, la expresión evalúa a Verdadero porque any() devuelve una matriz booleana con al menos un valor Verdadero, que es equivalente a Verdadero en un contexto booleano.
Para resumir, al trabajar con matrices de numpy y any()/all(), use “==” en lugar de “is True/False” para comprobar los valores de la matriz booleana.