In genere questo messaggio di errore quando si tenta di utilizzare Python operatori booleani (not
, and
, or
) sulle espressioni di confronto che coinvolgono le matrici numpy, per esempio
>>> 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()
Questo perché tali confronti, a differenza di altri confronti in Python, creano array di booleani anziché booleani singoli (ma forse si sapevano già che):
>>> 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 della soluzione al vostro problema probabilmente per sostituire and
per np.logical_and
, che trasmette l'operazione AND su due matrici di 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])
Tuttavia, tali array di booleani non possono essere utilizzati per indicizzare in liste Python ordinari, quindi è necessario convertire in un array:
rbs = np.array([ish[4] for ish in realbooks])
Quale riga causa l'errore? Inoltre, si prega di formattare il codice in modo che venga effettivamente eseguito. –
Sarebbe utile se si stampasse il valore di var. Ad una ipotesi, il problema è nella variabile stringa/float/text sostituita che stai decrementando ... Come sono i dati originali che richiederebbero una serie di operazioni? – abought