Después de observar en varios repositorios y páginas al concluir hemos hallado la respuesta que te compartiremos aquí.
Solución:
Usando not a
para probar si a
es None
asume que los otros valores posibles de a
tener un valor de verdad de True
. Sin embargo, la mayoría de las matrices NumPy no tienen ningún valor de verdad y not
no se les puede aplicar.
Si desea probar si un objeto es None
la forma más general y confiable es usar literalmente un is
comprobar contra None
:
if a is None:
...
else:
...
Esto no depende de que los objetos tengan un valor de verdad, por lo que funciona con matrices NumPy.
Tenga en cuenta que la prueba debe ser is
no ==
. is
es una prueba de identidad de objetos. ==
es lo que sea que digan los argumentos, y las matrices NumPy dicen que es una comparación de igualdad transmitida por elementos, que produce un valor booleano array:
>>> a = numpy.arange(5)
>>> a == None
array([False, False, False, False, False])
>>> if a == None:
... pass
...
Traceback (most recent call last):
File "", line 1, in
ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()
Por otro lado, si desea probar si un objeto es un NumPy arraypuedes probar su tipo:
# Careful - the type is np.ndarray, not np.array. np.array is a factory function.
if type(a) is np.ndarray:
...
else:
...
También puedes usar isinstance
que también volverá True
para subclases de ese tipo (si eso es lo que quieres). Teniendo en cuenta lo terrible e incompatible np.matrix
es, es posible que en realidad no quieras esto:
# Again, ndarray, not array, because array is a factory function.
if isinstance(a, np.ndarray):
...
else:
...
Aquí tienes las comentarios y valoraciones
Puedes añadir valor a nuestra información contribuyendo tu experiencia en las acotaciones.