Saltar al contenido

ValueError al verificar si la variable es None o numpy.array

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 Nonela 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 isno ==. 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 isinstanceque 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *