Por lo general, este mensaje de error al intentar utilizar los operadores booleanos (Python not
, and
, or
) en expresiones de comparación que involucran matrices, por ejemplo numpy
>>> x = np.arange(-5, 5)
>>> (x > -2) and (x < 2)
Traceback (most recent call last):
File "<ipython-input-6-475a0a26e11c>", line 1, in <module>
(x > -2) and (x < 2)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Eso es porque este tipo de comparaciones, a diferencia de otras comparaciones en Python, crean matrices de booleanos en lugar de booleanos simples (pero tal vez ya sabían que):
>>> x > -2
array([False, False, False, False, True, True, True, True, True, True], dtype=bool)
>>> x < 2
array([ True, True, True, True, True, True, True, False, False, False], dtype=bool)
Parte de la solución a su problema probablemente para reemplazar and
por np.logical_and
, que transmite la operación Y en dos matrices de np.bool
.
>>> np.logical_and(x > -2, x < 2)
array([False, False, False, False, True, True, True, False, False, False], dtype=bool)
>>> x[np.logical_and(x > -2, x < 2)]
array([-1, 0, 1])
Sin embargo, este tipo de matrices de booleanos no se pueden utilizar para indexar en las listas de Python ordinarios, por lo que necesita para convertir eso a una matriz:
rbs = np.array([ish[4] for ish in realbooks])
¿Qué línea causa el error? Además, formatee su código para que realmente se ejecute. –
Ayudaría si imprimiera el valor de var. En una suposición, el problema está en la variable de cadena/flotante/texto que está disminuyendo ... ¿Cómo se ven los datos originales que requerirían esa serie de operaciones? – abought